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 не поддерживает это.