
特定のディレクトリにあるすべてのファイルの最初の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
最後に、通常のファイルを指すシンボリックリンクも追跡するには、-xtype
inを代わりに使用してください-type
(またはfind -L
代わりに使用してくださいfind
)。
find
(私はGNU以上であると仮定しますxargs
。GNU環境でない場合はコメントの注意事項を参照してください。)