特定のディレクトリにあるすべてのファイルの最初の4行を一覧表示します。

特定のディレクトリにあるすべてのファイルの最初の4行を一覧表示します。

特定のディレクトリにあるすべてのファイルの最初の4行を一覧表示するには、どのコマンドを作成できますか?

答え1

[root@xxx httpd]# head -n 4 /var/log/httpd/*
==> /var/log/httpd/access_log <==
xxxx - - [06/Dec/2015:22:22:45 +0100] "GET / HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36 Vivaldi/1.0.303.52"
xxxx - - [06/Dec/2015:22:22:46 +0100] "GET /favicon.ico HTTP/1.1" 404 291 "http://195.154.165.63:8001/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36 Vivaldi/1.0.303.52"

==> /var/log/httpd/access_log-20151018 <==
xxxx - - [12/Oct/2015:14:05:42 +0200] "GET /git HTTP/1.1" 404 281 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"
xxxx - - [12/Oct/2015:14:05:42 +0200] "GET /favicon.ico HTTP/1.1" 404 289 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"
xxxx - - [12/Oct/2015:14:05:43 +0200] "GET /favicon.ico HTTP/1.1" 404 289 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"
xxxx - - [12/Oct/2015:14:06:24 +0200] "GET /git HTTP/1.1" 502 465 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0"

==> /var/log/httpd/access_log-20151115 <==
xxxx - - [14/Nov/2015:18:56:04 +0100] "GET / HTTP/1.1" 200 7 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0"
xxxx - - [14/Nov/2015:18:56:05 +0100] "GET /favicon.ico HTTP/1.1" 404 291 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0"
xxxx - - [14/Nov/2015:18:56:05 +0100] "GET /favicon.ico HTTP/1.1" 404 291 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0"
xxxx - - [14/Nov/2015:18:58:28 +0100] "GET /phpmyadmin HTTP/1.1" 403 294 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:42.0) Gecko/20100101   Firefox/42.0"

head -n 4 /var/log/httpd/*以下は、最初の4行のコマンドを含むhttpdディレクトリの例です。最初の行head -n 4を。head -n 1

/var/log/httpd/*たとえば、ディレクトリをユーザーディレクトリに置き換えることができますが、/my/directory/*最後にワイルドカード文字()を忘れないでください*。このワイルドカードを使用すると、ディレクトリ内のすべての(隠されていない)ファイルが欲しいことがわかります。

答え2

ファイル名ではなく、次の4行だけが必要な場合:

awk 'FNR<=4' ./*.log

ファイル名を行プレフィックスとして使用するには:

awk 'FNR<=4 {print FILENAME ": " $0}' ./*.log

またはGNUを使用してくださいgrep

grep -Hm4 '^' ./*.log

答え3

「すべてのファイル」がディレクトリ、ソケット、FIFOなどではなく「一般ファイル」を参照している場合は、次のコマンドを使用してそのファイルを見つける必要がありますfind

find "$dir" -maxdepth 1 -type f

そしてそれを渡してxargs呼び出しますhead

find "$dir" -maxdepth 1 -type f -print0 | xargs -0 head -n 4

最後に、通常のファイルを指すシンボリックリンクも追跡するには、-xtypeinを代わりに使用してください-type(またはfind -L代わりに使用してくださいfind)。

find(私はGNU以上であると仮定しますxargs。GNU環境でない場合はコメントの注意事項を参照してください。)

関連情報