Подтвердить что ты не робот

Изменение разрешения для файлов и папок с помощью команды оболочки в mac

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

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

как я могу сделать то же самое для mac, так как я получаю следующую ошибку.

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

4b9b3361

Ответ 1

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

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

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

chmod -R 777 /Users/Test/Desktop/PATH

Ответ 2

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

chmod -R 777 /Users/Test/Desktop/PATH

Ответ 3

Используя CHMOD да:

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

chmod -R 777 foldername or pathname

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

chmod 777 foldername or pathname

Ответ 4

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

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

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

chmod 755 `find . -type d`

и так:

chmod 755 $(find . -type d)

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

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

chmod 777 $(find "/Users/Test/Desktop/PATH")