find
не пропустит точечные файлы, таким образом, .[^.]*
(.[!.]*
в стандартном синтаксисе), избыточно и заставит те файлы быть обработанными дважды (и каталоги для происхождения дважды). (также отметьте это .[!.]*
файлы промахов называют ..foo
например).
Однако find
по умолчанию, не убывает в символьные ссылки на каталоги. Итак, если media
символьная ссылка на область снаружи .
, файлы там не будут обработаны.
Можно использовать -L
для сообщения находят для следования за символьными ссылками. Обратите внимание однако, что это также вызовет chmod
быть названным для файлов, которые являются символьными ссылками на регулярные файлы.
sudo find -L . -type f -exec chmod 664 {} +
Или с некоторыми find
/xargs
реализации:
find -L . -type f -print0 | sudo xargs -r0 chmod 664
Вопреки тому, что было сказано здесь, xargs
и find -exec +
будет заботиться о разделении списка аргументов chmod
если это является слишком большим.
Однако нужно отметить, что предел, о котором мы говорим здесь, является кумулятивным размером аргументов, и среда передала команде (к execve(2)
системный вызов).
find
и xargs
удостоверится, что тот предел не достигнут (и отпуск немного поля), но если Вы выполняете его как:
find . -type f -print0 | xargs -r0 sudo chmod 644
вместо:
find . -type f -print0 | sudo xargs -r0 chmod 644
sudo
команда (названный xargs
) получит все аргументы для передачи chmod
и также передаст a SUDO_COMMAND
переменная среды к chmod
это содержит список файлов другое время, таким образом, он будет о дважды размере arg+env, переданного chmod
и объяснил бы, почему предел превышен.
x дает вам доступ к входящим в каталог файлам (что означает, что вы можете видеть их разрешения и, в соответствии с ними, иметь доступ к содержимому), но вы все равно ничего не можете изменить в каталоге; каталог на самом деле является чем-то вроде файла, и для того, чтобы изменить что-то в нем, вам нужно разрешение w.
Да.
Но зачем нужен x для создания (вы можете попросить систему создать файл, не раскрывая его содержимое?) и переименования/перемещения файла (когда вы перемещаете файл, вы никак его не меняете, вы изменяете только записи в каталогах и их количество в коде?)?
Без x
, вы можете влиять только на сам каталог - вы видите каталог снаружи. Без x
записи каталога для вас выходят за рамки. Если вы хотите добавить, удалить или изменить (например, переименовать) запись в справочнике, вы должны иметь доступ к этой записи.
Разрешения на файл определяют, что вы можете делать с его содержимым. Разрешения на запись в записной книжке определяют, что можно сделать с записью в записной книжке для файла, поскольку записи в записной книжке - это содержимое записной книжки.
Разрешение на запись в записную книжку позволяет создавать и удалять записи. Переименование считается атомическим созданием записи и удалением другой записи. Кроме того, каталоги имеют те же метаданные, что и обычные файлы. Разрешение на запись также позволяет изменять последнее изменение каталога и последние метки времени доступа. Для изменения прав доступа к каталогу, группового владения или списков контроля доступа (где это поддерживается), вам нужно владеть им. Для изменения прав собственности пользователя большинство unix-вариантов требуют root.