Я ищу что-то вроде:
ls | ask_yes_no_for_each_file | chmod +x the_files_approved
Или похожий синтаксис.
Также может работать с другими командами, для которых вы хотите индивидуальное подтверждение.
Я ищу что-то вроде:
ls | ask_yes_no_for_each_file | chmod +x the_files_approved
Или похожий синтаксис.
Также может работать с другими командами, для которых вы хотите индивидуальное подтверждение.
Это делает то, что вы ищете:
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 не указал на это.]
Вы можете использовать xargs
.
например:
ls|xargs -I path -p chmod +x path
Опция -p
: запрашивать у пользователя, нужно ли запускать каждую командную строку и читать строку из терминала.Запускайте командную строку только в том случае, если ответ начинается с «y» или «Y».