+1 на предложении S.Lott именованного контейнерного класса.
Для Python 2.6 и, названный кортежем обеспечивает полезный способ легкого создания этих контейнерных классов, и результаты являются "легким весом и не требуют больше памяти, чем регулярные кортежи".
Ответ find -exec
- хороший ответ, но он страдает обычно несущественным недостатком, заключающимся в создании отдельного подпроцесса для каждого отдельного файла. Однако он отлично работает и будет работать плохо только тогда, когда количество файлов станет действительно большим. Использование xargs
объединит имена файлов в большие группы перед запуском подпроцесса для этой группы файлов.
Вы просто должны быть осторожны при использовании ] xargs
, вы правильно обрабатываете имена файлов со встроенными пробелами, новой строкой или другими специальными символами в них.
Решение, которое решает обе эти проблемы: (при условии, что у вас есть достаточно приличные find
и ] xargs
реализация):
Другой способ сделать это - использовать find ... -exec ...
следующим образом:
find . -type f -exec chmod 644 {} \;
Проблема в том, что -exec
запускает процесс chmod
для каждого файла. Подход xargs
позволяет избежать этого и превосходит его при условии, что у вас есть версия find
и xargs
, которая может справиться с проблемой «пробелов в именах путей»; см. принятый ответ.
И для записи, использование обратных тиков приведет к сбою, если слишком много файлов для chmoded или совокупная длина имен путей слишком велика.
"find. -type f -print | xargs chmod 444 "должно работать, не так ли? Если нет, найди. -print> myfile.sh и vi myfile.sh удаляя каталоги (их не должно быть слишком много), а затем 1, $ s / ^ / chmod 444 / и sh myfile.sh.
с GNU find
find / path -type f -exec chmod 644 {} +;