특정 디렉터리에 있는 모든 파일의 처음 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 환경이 아닌 경우 주석의 참고 사항을 참조하십시오.)