Я использую инструмент командной строки "скопление" для управления, привязывает мои сценарии удара, как описано здесь и здесь. Я использовал этот простой метод из страницы справочника скопления, для выполнения некоторых команд в подоболочке...
(
flock -n 9
# ... commands executed under lock ...
) 9>/var/lock/mylockfile
В том примере это перестало работать с кодом выхода 1, если это не может получить lockfile. Но скопление может также использоваться способами, которые не требуют, чтобы команды были выполнены в подоболочке :-)
Две стандартных команды head
и tail
распечатайте заголовок с именем файла при передаче их больше чем один аргумент файла. Для печати целого файла использовать tail -n +1
(печать от первой строки вперед, т.е. всего).
Здесь, похоже, что Вы хотите видеть каждый файл кроме единственного, имя которого начинается с точки. Точечные файлы “скрыты” под Unix: они не появляются в выводе по умолчанию ls
или в подстановочном соответствии. Так соответствие каждому, который нескрытые файлы, покончило просто *
.
tail -n +1 *
(Строго говоря, tail -n +1 -- *
необходим в случае, если одни из имен файлов начинаются с a -
.)
Можно сделать все это в одном с 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
Это циклично выполняется по каждому аргументу имени файла, распечатывает имя файла (полужирным зеленый), и затем кошки файл:
Таким образом команда просто была бы:
$ find . -type f -not -name .htaccess -exec cats {} \+
Если Вы хотите точно настроить и не освобождаете слишком много времени с каналами, найдите и все (будучи самым мощным набором инструментальных средств, который Вы могли когда-либо находить),
просто попытайтесь использовать для цикла, кошку, и т.д.
Чтобы показать содержимое всех файлов в текущей папке, попробуйте:
grep -vI "\x00" -- *
и аналогичный, но рекурсивно:
grep -vIr "\x00" -- .
Формат будет: Имя файла: Содержание
.
Чтобы иметь аналогичный формат, как предложено, это было бы:
grep -rvl "\x00" -- * | while read file; do printf "\n\n#### $file ####\n"; cat $file; done
боковые примечания:
\ x00
) в приведенных выше примерах предотвращает отображение двоичных файлов (которые -i
на самом деле делает, но мы все еще используем некоторые шаблон). *
), он автоматически игнорирует скрытые файлы, такие как .htaccess
. Смотрите также: GREP: отображение файла один раз, затем отобразить контекст с номерами строк в Unix SE
--
модификатор? – Znarkus 30.04.2011, 13:37--
показать конец опций - конвенция, которой повинуется большинство команд. Например.tail -n +1 -- -f -g
говоритtail
это-f
и-g
файлы должны читать (операнды) и не опции. Это - инструкция 10 в инструкции по синтаксису утилиты POSIX (документ, предназначенный для служебных устройств записи). Мне не предназначили предложение чтения для конечных пользователей, я ожидал бы, что хорошее учебное руководство по Unix будет касаться его в какой-то момент. – Gilles 'SO- stop being evil' 30.04.2011, 13:50