Изменение разрешения для файлов и папок с помощью команды оболочки в mac
В Linux мы можем использовать следующую команду для рекурсивного изменения режима разрешений файлов и папок.
find "/Users/Test/Desktop/PATH" -exec * chmod 777 {} \;
как я могу сделать то же самое для mac, так как я получаю следующую ошибку.
find: TEST_FILE: нет такого файла или Каталог
Ответы
Ответ 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")