рекурсивное изменение разрешения для файлов и папок с помощью команды shell в Mac - PullRequest
26 голосов
/ 01 октября 2010

В Linux мы можем использовать следующую команду для рекурсивного изменения режима прав доступа к файлам и папкам.

find "/ Users / Test / Desktop / PATH" -exec * chmod 777 {} \;

Как я могу сделать то же самое для Mac, так как я получаю следующую ошибку с повторением.

find: TEST_FILE: Нет такого файла или каталога

Ответы [ 4 ]

37 голосов
/ 01 октября 2010

Проблема в том, что * интерпретируется вашей оболочкой и расширяется до файла с именем TEST_FILE, который находится в вашем текущем рабочем каталоге, поэтому вы говорите find выполнить команду с именемTEST_FILE который не существует.Я не уверен, что вы пытаетесь достичь с помощью этого *, вы должны просто удалить его.

Кроме того, вы должны использовать идиому -exec program '{}' \+ вместо -exec program '{}' \;, чтобы findне разворачивает новый процесс для каждого файла.С ; новый процесс разветвляется для каждого файла, тогда как с + он разветвляется только на один процесс и передает все файлы в одной командной строке, что для простых программ, таких как chmod, гораздо более эффективно.

Наконец, chmod может делать рекурсивные изменения самостоятельно с флагом -R, поэтому, если вам не нужно искать конкретные файлы, просто сделайте это:

chmod -R 777 /Users/Test/Desktop/PATH
29 голосов
/ 01 октября 2010

Вы можете просто использовать флаг -R (рекурсивный).

chmod -R 777 /Users/Test/Desktop/PATH
10 голосов
/ 20 мая 2013

При использовании CHMOD да:

Для рекурсивного файла:

chmod -R 777 foldername or pathname

Для нерекурсивных:

chmod 777 foldername or pathname
4 голосов
/ 28 октября 2016

У меня нет компьютера Mac OSx для тестирования этого, но в bash в Linux я использую что-то вроде следующего для директорий chmod only:

find . -type d -exec chmod 755 {} \+

, но это также делает то же самое:

chmod 755 `find . -type d`

и так:

chmod 755 $(find . -type d)

Последние два используют разные формы подкоманд.Первый использует обратные пометки (старые и устаревшие), а другой - синтаксис подкоманды $ () .

Так что я думаю, что в вашем случае следующее будет делать то, что вы хотите.

chmod 777 $(find "/Users/Test/Desktop/PATH")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...