いくつかの小さなファイル(それぞれの文)を標準出力として印刷するために、bashのワイルドカードでcatを使用したいと思います。しかし、個々のファイルの内容は改行文字で区切られていないので、読みやすくなることを願っています。
このコマンドに一種のファイル区切り文字を追加するにはどうすればよいですか?
答え1
各ファイルの後に行末を印刷するシェル関数を定義し、代わりに使用しますcat
。
endlcat() {
for file in "$@"; do
cat -- "$file"
echo
done
}
それからそれを使うことができますendlcat *
。
などのワイルドカードを使用するときは、シェルからエスケープされたfor
すべての指定された引数()を繰り返します。ダッシュで始まるファイル名をブロックする必要はありません。最後に改行文字を出力します。$@
*
--
echo
答え2
単純ではなくループを使用してくださいcat
。
for file in /path/to/targetdir/*; do
echo "-------- $file -------"
cat "$file"
done
答え3
ファイル間でファイル名が必要な場合は、以下を使用してくださいtail
。
tail -n +1 ./*
(一部の実装では、tac
必要に応じて同等の機能を選択することもできます。)cat
tail
-r
tac
答え4
〜のように@テデン答え、後でファイル名を確認したい場合は、次のコマンドを使用できますhead
。
$ head *file*
==> file_1 <==
file 1 content
==> file_2 <==
file 2 content
==> file_3 <==
file 3 content
head
デフォルトは最初の10行なので、コマンドオプションなしで(ファイルごとに1文)使用してもかまいません。それ以外の場合は、この-n X
オプションが必要です。