Ответ 1
Я бы рекомендовал вам вместо этого сделать это как
find . -perm 777 -print0 | xargs -0 chmod 770
"xargs" говорит, чтобы взять результаты поиска и подать его по 20 за один раз следующей командой.
Команда find, похоже, отличается от других команд Unix.
Почему существуют пустые фигурные скобки и обратная вспышка в конце следующей команды?
find * -perm 777 -exec chmod 770 {} \;
Я нашел одну причину для фигурных скобок, но не для обратной вспышки.
Кудрявые скобки, по-видимому, для пути
То же, что и -exec, за исключением того, что `` {} '' заменен на столько дорожек, как возможно для каждого вызова утилита
Я бы рекомендовал вам вместо этого сделать это как
find . -perm 777 -print0 | xargs -0 chmod 770
"xargs" говорит, чтобы взять результаты поиска и подать его по 20 за один раз следующей командой.
За командой -exec может следовать любое количество аргументов, которые составляют команду, которая должна быть выполнена для каждого найденного файла. Должен быть какой-то способ определить последний аргумент. Это то, что \; делает. Обратите внимание, что после переключения -exec могут следовать другие вещи:
find euler/ -iname "*.c*" -exec echo {} \; -or -iname "*.py" -exec echo {} \;
(Это находит все файлы c файлов и python в каталоге euler.)
Причина, по которой exec не требует, чтобы полная команда находилась внутри кавычек, заключается в том, что в большинстве случаев это потребовало бы избежать много кавычек внутри команды.
Строка {}
в find
заменяется именем пути к текущему файлу.
Точка с запятой используется для завершения команды оболочки, вызванной утилитой find
.
Он должен быть экранирован или процитирован, поэтому он не будет интерпретироваться оболочкой, потому что ;
является одним из специальных символов, используемых оболочкой (операторы списка).
См. также: Почему обратная косая черта и точка с запятой требуется с параметром -exec команды find?
Требуется (с экранированной) точкой с запятой, чтобы "find" мог указать, где заканчиваются аргументы программы exec'd (если они есть), и добавляются дополнительные аргументы для "find".