изменение chmod для файлов, но не каталогов

+1 на предложении S.Lott именованного контейнерного класса.

Для Python 2.6 и, названный кортежем обеспечивает полезный способ легкого создания этих контейнерных классов, и результаты являются "легким весом и не требуют больше памяти, чем регулярные кортежи".

67
задан Ori 22 July 2009 в 05:58
поделиться

4 ответа

Ответ find -exec - хороший ответ, но он страдает обычно несущественным недостатком, заключающимся в создании отдельного подпроцесса для каждого отдельного файла. Однако он отлично работает и будет работать плохо только тогда, когда количество файлов станет действительно большим. Использование xargs объединит имена файлов в большие группы перед запуском подпроцесса для этой группы файлов.

Вы просто должны быть осторожны при использовании ] xargs , вы правильно обрабатываете имена файлов со встроенными пробелами, новой строкой или другими специальными символами в них.

Решение, которое решает обе эти проблемы: (при условии, что у вас есть достаточно приличные find и ] xargs реализация):

101
ответ дан 24 November 2019 в 14:32
поделиться

Другой способ сделать это - использовать find ... -exec ... следующим образом:

find . -type f -exec chmod 644 {} \;

Проблема в том, что -exec запускает процесс chmod для каждого файла. Подход xargs позволяет избежать этого и превосходит его при условии, что у вас есть версия find и xargs , которая может справиться с проблемой «пробелов в именах путей»; см. принятый ответ.

И для записи, использование обратных тиков приведет к сбою, если слишком много файлов для chmoded или совокупная длина имен путей слишком велика.

29
ответ дан 24 November 2019 в 14:32
поделиться

через http://www.linuxquestions.org/questions/aix-43/chmod-recursion-files-only-208798/?s=a70210fb5e5d0aa7d3c69d8e8e64e3ed

"find. -type f -print | xargs chmod 444 "должно работать, не так ли? Если нет, найди. -print> myfile.sh и vi myfile.sh удаляя каталоги (их не должно быть слишком много), а затем 1, $ s / ^ / chmod 444 / и sh myfile.sh.

2
ответ дан 24 November 2019 в 14:32
поделиться

с GNU find

find / path -type f -exec chmod 644 {} +;

2
ответ дан 24 November 2019 в 14:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: