файлы chmod только во всех подкаталогах

54

Пожалуйста, кто-нибудь, помогите мне с chmod, у меня следующая структура файла

-dir1
--file1
--file2
--dir1a
---file1a1
---file1a2
--dir1b
---file1b1
---file1b2

Как мне chmod 655 ко всем файлам в dir1 и всех subdir? Таким образом, все файлы будут иметь разрешение 655, и все каталоги останутся без изменений.

Спасибо

нитные
источник

Ответы:

108

Лучше использовать

find . -type f -exec chmod 655 -- {} +

Другое предлагаемое решение от @sagarchalise не будет работать, если имена файлов содержат пробелы или начинаются с тире.

enzotib
источник
16
Кроме того, для chmod всех каталогов вы можете использовать find . -type d -exec chmod 755 {} +для изменения всех каталогов на 755.
Kris Harper
2
Для чего нужен +?
Бретцки
3
@Brettski: +знак расширяется findдо списка путей к файлам (или его части, если они слишком длинные).
энзотиб
3
Для чего?
Ориентир
2
--Означает конец параметров командной строки. Это предотвращает интерпретацию файла, начинающегося с дефиса, как параметра командной строки, так как он будет указан после --.
Тим Тисдалл
8

Я думаю, что идти внутрь dir1и

find . -type f | xargs chmod 655

сделает свое дело.

sagarchalise
источник
это тоже работает, но у меня есть предупреждение с «Нет такого файла или каталога»
netic
@manetic: это зависит, как сказано в моем ответе, от имен файлов, содержащих пробелы.
энзотиб
4
Для полноты, изменив его, чтобы найти. -тип f -print0 | Я полагаю, что xargs -0 chmod 655 исправит проблему с пространством, хотя ответ @ enzotib более краткий
matt freake
что сказал Мэтт Фрейк
Сергей Колодяжный