
Я ищу что-то вроде:
ls | ask_yes_no_for_each_file | chmod +x the_files_approved
Или подобный синтаксис.
Также может работать с другими командами, для которых требуется индивидуальное подтверждение.
решение1
Это то, что вы ищете:
find . -maxdepth 1 -type f -print0 | xargs -L1 -p0 chmod +x
Это использует find
скорее, чем ls
потому, что, как правило,вывод анализа ls
ненадежен. Однако эта форма, использующая find
, будет работать с именами файлов, даже если они содержат символы новой строки или другие сложные символы.
Объяснение
find . -maxdepth 1 -type f -print0
Это выбирает файлы. Это можно настроить с помощью любой из многочисленных опций find. Опция
print0
указываетfind
на печать имен файлов в списке, разделенном нулем. Это единственный надежный способ передачи списков имен файлов.xargs -L1 -p0 chmod +x
Эта команда берет список имен файлов, разделенных нулем, сгенерированный с помощью,
find
и применяет к ним вашу команду.
Параметр -L1
указывает xargs
работать только с одним именем файла за раз. Параметр -p
указывает xargs
запрашивать одобрение перед продолжением. Параметр -0
указывает xargs
использовать нулевой символ в качестве разделителя между именами файлов.
[Я не знал о такой -p
возможности, xargs
пока @kwan не указал на нее.]
решение2
Вы можете использовать xargs
.
например:
ls|xargs -I path -p chmod +x path
Вариант -p
: Спрашивать пользователя о том, следует ли запускать каждую командную строку и читать строку из терминала. Запускать командную строку только в том случае, если ответ начинается с 'y' или 'Y'.