Как я открываю все файлы, которые являются результатом команды ls?

Это является возможно самым легким с жемчугом (так как жемчуг похож на sed и awk, я надеюсь, что это приемлемо для Вас):

perl -p -e 's/\\\n//'
10
04.05.2011, 17:51
3 ответа

Gilles точно прав, ls действительно плохой пример, потому что расширение шарика имени файла может быть сделано намного легче на командной строке, не имея необходимость использовать ls вообще! Если Ваши так называемые "текстовые файлы" имеют расширения файла для идентификации их, Вы могли бы сделать что-то вроде этого:

editor-command *.txt

Ради демонстрации техники, позволяет, используют более сложный пример, который не мог быть, покончили просто соответствие имени файла и открытые файлы на основе содержания вместо просто имени файла. Позволяет говорят, что Вы хотели открыть все файлы, которые содержали строку "тип контента".

Принятие Вашего редактора будет принимать несколько имен файлов и открывать их внезапно в отдельных буферах или последовательно работать, это - путь через них, можно просто работать:

editor-command $(grep -i content-type)

Теперь назад к Вашему исходному вопросу, позволяет, говорят, что Вы не знаете, являются ли они текстовыми файлами или не на основе их имен. Необходимо было бы затем использовать другую программу для идентификации их, затем открыть их на основе тех данных. Программа file скажет Вам, какой файл что-то, и Вы можете grep, которые перечисляют для просто текстовых файлов и затем открывают просто имена файлов соответствия как это:

editor-command $(file -ni * | grep 'text/plain' | cut -d: -f1)

Вывод цепочки команды в $() конструкция будет использоваться в качестве аргументов в пользу редактора. Я иногда делаю это на двух этапах. Скажите, что я просматриваю некоторый набор файлов и вовлекаю себя список каждого XML-файла, содержащего строку "тип контента"

find -type f -iname '*xml' | xargs grep -Hi 'content-type' |  cut -d: -f1

... и решите, что я хочу открыть их. Я затем использую последний ярлык истории команд и делаю это:

vim $(!!)

... открыть все результаты предыдущей команды в энергии, моем любимом редакторе.

Если Ваш редактор только примет один файл за один раз, и необходимо продолжать извергать редакторов, необходимо будет использовать вариант любого xargs или for цикл в ответе jmtd в зависимости от того, используете ли Вы на терминальном основанного редактора, которому нужен stdio.

11
27.01.2020, 20:01
  • 1
    Не анализируйте вывод ls! Использовать editor-command *.css, и т.д. –  Gilles 'SO- stop being evil' 04.05.2011, 23:23
  • 2
    @Gilles: Должным образом отмеченный, благодарит указать на очевидное, что все мы не могли видеть. Примечание @c0smikdebris, что я просто полностью переписываю свой ответ включая случай для того, если у Вас нет очевидного способа соответствовать, какие файлы являются текстом просто своим именем. –  Caleb 05.05.2011, 00:04
  • 3
    Мой ноутбук использует ACPI и не lm-датчики поддержки. Если Вы знаете, как установить его с ACPI, добавьте его к своему ответу. Я вчера решил его с sudo cpufreq-selector -g powersave ---------121$--------110371----() - то, что я на самом деле искал. я должен был упомянуть, что использую ls в качестве примера здесь. +1 к обоим ответам. –  c0smikdebris 05.05.2011, 09:29
  • 4
    "мой любимый редактор". Никакая потребность указать, @Caleb, так как это ясно более или менее с начала ответа, ahahah! Лучший редактор когда-либо! –  Enrico Maria De Angelis 16.03.2017, 10:30

Открыть все файлы назвало что-то .txt (т.е. *.txt) в текущем каталоге:

$EDITOR *.txt

где $EDITOR Ваш любимый редактор, например. gedit *.txt, nano *.txt, vim *.txt, emacs *.txt или что бы то ни было. Используйте просто * соответствовать всем файлам в текущем каталоге.

Обратите внимание что ls команда не включена. Задание ls не должен действительно отображать список файлов, хотя это происходит при вызове его на каталог. Где ls полезно, находится в отображении атрибутов файла (время изменения, полномочия, размер и так далее). Чтобы просто сделать что-то на наборе файлов, соответствующих определенному подстановочному шаблону, шарики оболочки достаточно.

Усовершенствованный достаточно редакторов позволяет Вам сделать это изнутри. Например, в Emacs, просто используйте нормальную команду открытия файла (C-x C-f) и войдите *.txt.

Если Вы также хотите соответствовать файлам в подкаталогах в zsh или колотить ≥4, можно использовать $EDITOR **/*.txt.

4
27.01.2020, 20:01
  • 1
    Это является действительно определенным для редактора. Нет никакой гарантии, все редакторы будут рассматривать все свои бесплатные параметры командной строки как файлы, чтобы открыть, ни поддерживать открытие больше чем один файл за один раз. –  jmtd 09.05.2011, 16:48

Это зависит от некоторых нюансов Вашего текстового редактора. Усовершенствованные редакторы могут, вероятно, обработать открытие нескольких файлов из командной строки в одном экземпляре. Но скажите, например, что Ваш редактор ($EDITOR в моих примерах ниже) может только открыться по одному. Необходимо передать вывод по каналу соответствующего find в xargs. Это также зависит от $EDITOR, не занимая TTY (так, с помощью графического)

find . -maxdepth 1 -type f -name '*.c' -print0 | xargs -r0n 1 $EDITOR

Если Вы хотите использовать консольного редактора, цикл оболочки мог бы быть более соответствующим, но если перестанет работать для многих редких имен файлов (путем сворачивания или замены пробельными символами и различными другими вещами):

for i in *.c; do $EDITOR "$i"; done
2
27.01.2020, 20:01
  • 1
    Не анализируйте вывод ls! Использовать $EDITOR *.c или for i in *.c; do $EDITOR "$i"; done. –  Gilles 'SO- stop being evil' 04.05.2011, 23:23
  • 2
    Хорошая выгода - отредактированный соответственно. –  jmtd 09.05.2011, 16:49
  • 3
    Обратите внимание что for случай перестанет работать для многих имен файлов, включая сворачивание/изменение пробельных символов. –  jmtd 09.05.2011, 16:52
  • 4
    Поскольку это записано теперь, for случай будет работать с каждым именем файла (кроме возможно начала имен - или + с некоторыми редакторами; for i in ./*.c зафиксировал бы это). –  Gilles 'SO- stop being evil' 09.05.2011, 18:59

Теги

Похожие вопросы