Существует ли однострочная команда, позволяющая сделать chmod интерактивным?

Существует ли однострочная команда, позволяющая сделать chmod интерактивным?

Я ищу что-то вроде:

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'.

Связанный контент