Ответы:
Это делает то, что вы ищете:
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
Это использует, find
а не ls
потому, что, как правило, разбор ls
выходных данных ненадежен . Эта форма, используя find
, однако, будет работать с именами файлов, даже если они содержат символы новой строки или другие сложные символы.
объяснение
find . -maxdepth 1 -type f -print0
Это выбирает файлы. Это можно настроить, используя любой из множества параметров поиска. Опция print0
заставляет find
печатать имена файлов в списке, разделенном нулями. Это единственный надежный способ передачи списков имен файлов.
xargs -L1 -p0 chmod +x
Это берет разделенный нулями список имен файлов, созданных find
и применяет вашу команду к ним.
-L1
Опция указывает xargs
работать только на одном имени файла одновременно. -p
Опция указывает xargs
запрашивать утверждения , прежде чем продолжить. -0
Опция указывает xargs
использовать нулевой символ в качестве разделителя между именами файлов.
[Я не знал о -p
опции к xargs
пока @kwan не указал на это.]
find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
так что работает с -maxdepth 1
до -type f
, как: find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
.
Вы можете использовать xargs
.
например:
ls|xargs -I path -p chmod +x path
Опция -p
: Подскажите пользователю, нужно ли запускать каждую командную строку и читать строку из терминала. Запускайте командную строку только в том случае, если ответ начинается с «y» или «Y».
xargs -p
, что я его скопирую.
touch "a very long file name
и нажмите Enter. Посмотрите продолжение строки и просто введите закрывающую кавычку и снова нажмите ввод. Тадаа, новая строка в имени файла. Из-за лени перепечатывать длинное имя файла.
find
команду POSIX совместимой, используя-exec printf '%s\0' {} +
. Не думайте, что есть какой-нибудь способ сделать все это POSIX-совместимым.