Покажите содержание многих файлов

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

   (
     flock -n 9
     # ... commands executed under lock ...
   ) 9>/var/lock/mylockfile

В том примере это перестало работать с кодом выхода 1, если это не может получить lockfile. Но скопление может также использоваться способами, которые не требуют, чтобы команды были выполнены в подоболочке :-)

19
30.04.2011, 01:30
5 ответов

Две стандартных команды head и tail распечатайте заголовок с именем файла при передаче их больше чем один аргумент файла. Для печати целого файла использовать tail -n +1 (печать от первой строки вперед, т.е. всего).

Здесь, похоже, что Вы хотите видеть каждый файл кроме единственного, имя которого начинается с точки. Точечные файлы “скрыты” под Unix: они не появляются в выводе по умолчанию ls или в подстановочном соответствии. Так соответствие каждому, который нескрытые файлы, покончило просто *.

tail -n +1 *

(Строго говоря, tail -n +1 -- * необходим в случае, если одни из имен файлов начинаются с a -.)

31
27.01.2020, 19:44
  • 1
    Короткий и сладкий, спасибо! Вы знаете, где я могу читать о -- модификатор? –  Znarkus 30.04.2011, 13:37
  • 2
    @Znarkus: -- показать конец опций - конвенция, которой повинуется большинство команд. Например. tail -n +1 -- -f -g говорит tail это -f и -g файлы должны читать (операнды) и не опции. Это - инструкция 10 в инструкции по синтаксису утилиты POSIX (документ, предназначенный для служебных устройств записи). Мне не предназначили предложение чтения для конечных пользователей, я ожидал бы, что хорошее учебное руководство по Unix будет касаться его в какой-то момент. –  Gilles 'SO- stop being evil' 30.04.2011, 13:50

Можно сделать все это в одном с find:

$ find . -type f -not -name .htaccess -printf "\n%p\n" -exec cat {} \;

Это говорит find найти все файлы (-type f) в текущем каталоге (.) кроме (-not) один названный .htaccess (-name .htaccess). Затем это печатает (-printf) новая строка сопровождается именем файла (%p), и затем работает cat на файле (-exec cat {} \;). Это даст Вам вывод как:

test/test3
Line 1

test/test2
Line 1

test/test1
Line 1
Line 2
Line 3

Если Вы часто делаете это, могло бы стоить засунуть его в сценарий оболочки или функцию; у меня есть названный тот cats это делает точно что:

#!/bin/bash
for filename; do
    echo "\033[32;1m$filename\033[0m"
    cat "$filename"
    echo
done

Это циклично выполняется по каждому аргументу имени файла, распечатывает имя файла (полужирным зеленый), и затем кошки файл:

Example screenshot

Таким образом команда просто была бы:

$ find . -type f -not -name .htaccess -exec cats {} \+
14
27.01.2020, 19:44
  • 1
    Другой был короче, так принят это. Превосходный ответ, хотя, спасибо! –  Znarkus 30.04.2011, 13:37

Если Вы хотите точно настроить и не освобождаете слишком много времени с каналами, найдите и все (будучи самым мощным набором инструментальных средств, который Вы могли когда-либо находить),

просто попытайтесь использовать для цикла, кошку, и т.д.

1
27.01.2020, 19:44

Вы можете использовать это:

cat $(find Directory/ -not -name *.htaccess)
2
27.01.2020, 19:44

Чтобы показать содержимое всех файлов в текущей папке, попробуйте:

grep -vI "\x00" -- *

и аналогичный, но рекурсивно:

grep -vIr "\x00" -- .

Формат будет: Имя файла: Содержание .

Чтобы иметь аналогичный формат, как предложено, это было бы:

grep -rvl "\x00" -- * | while read file; do printf "\n\n#### $file ####\n"; cat $file; done

боковые примечания:

  • с использованием Nul ( \ x00 ) в приведенных выше примерах предотвращает отображение двоичных файлов (которые -i на самом деле делает, но мы все еще используем некоторые шаблон).
  • Используя подстановочный знак ( * ), он автоматически игнорирует скрытые файлы, такие как .htaccess .

Смотрите также: GREP: отображение файла один раз, затем отобразить контекст с номерами строк в Unix SE

6
27.01.2020, 19:44

Теги

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