chmod 755 все исполняемые файлы Mach-O - macosx - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь получить команду оболочки, где мне нужно изменить разрешение на 755 для файлов, которые имеют "исполняемый файл Mach-O" в качестве выходной команды файла.

Мне удалось прийти к этому -find . -type f -exec file {} \; | grep executable

Но как мне на них chmod 755?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019
find . -type f -exec file {} + |
sed -n -e '/Mach-O .* executable/s/:.*//p' |
xargs chmod 755

Используя + вместо \;, команда file будет выполняться реже (она действует немного как xargs).Команда sed не печатает по умолчанию (-n), но ищет исполняемые файлы Mach-O и удаляет материал после : после имени файла, поэтому выводит список файлов.И команда xargs запускает chmod 755 для аргументов, которые она читает из стандартного ввода.Предполагая, что у вас нет имен исполняемых файлов, содержащих символы новой строки, пробелы, табуляции и другие странные символы, которые должны выполнять эту работу.Если вы не придерживаетесь набора символов переносимого имени файла POSIX, возможно, вам придется работать усерднее.

Обратите внимание, что если в текущем каталоге нет исполняемых файлов, вы получите сообщение об использовании от chmod, потому что xargs запускает команду один раз, даже если аргументов нет.GNU xargs имеет опцию -r, чтобы избежать вызова команды «запустить при пустом»;версия на macOS не поддерживает это.

0 голосов
/ 19 сентября 2019

Просто используйте gawk + xargs:

find . -type f -print0 -exec file {} \; | gawk -F\: '/Mach-O .* executable/ {print $1}' |xargs chmod 755
...