명령줄에서,여러 파일의 내용을 표시하는 가장 쉬운 방법은 무엇입니까?내 디렉토리는 아래와 같습니다.
./WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b
./xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM
./GZnATXO1e5Hh3Bz1bhgJjjwheIjjZqtnXR0hfOyj
./mWz7ehBNoTZmtDh8JG6sxw2lMJFwIovPzxDGECUY
./JN65F5v3RL2ilHPqNSx9N9D4lvVpqpbJ9lASd8TJ
./At9PS4y4nTiXUO0Z0USnbYkTPBla1msQRpwuruqE
./YiPyMZPCaUDZTiTczAvWII9bJrUqLXCFtH2pXEA2
./JoakdlbRFPwAvWp1d4n8RvMoyMeizCoiriL2Sn2U
./wFPWZUus8Yu7UtESGABLCoqDg36cT90USO0xuyUr
./qseI9PgV1EJfZCDyGGeVytajqG7JeX0r7eA5S1JW
./zgFJpNgXyCsaVh38aCuMGuzHwIbwSNB6rQDdh27x
./.htaccess
이제 다음과 같이 보고 싶습니다 .htaccess
.
WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b:
Contents of file WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b.
xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM:
Contents of file xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM.
[...]
내 생각에는 이것이 find, xargs 및 cat의 조합으로 가능해야 한다고 생각하지만 아직 방법을 찾지 못했습니다. 시간 내 주셔서 감사합니다!
답변1
여러 파일 인수가 표준 head
명령 및 일부 구현 에 전달되면 tail
(POSIX는 tail
0 또는 1개의 파일 인수만 허용) 파일 이름이 포함된 헤더가 인쇄됩니다. 전체 파일을 인쇄하려면 tail -n +1
(첫 번째 줄부터 인쇄, 즉 모든 항목을 인쇄)를 사용하세요.
여기에서는 이름이 점으로 시작하는 단일 파일을 제외한 모든 파일을 보려고 하는 것 같습니다. 도트 파일은 유닉스에서 "숨겨져 있습니다". 기본 출력 ls
이나 와일드카드 일치 에는 표시되지 않습니다 . 따라서 숨겨지지 않은 모든 파일을 일치시키려면 *
.
tail -n +1 -- *
또는 tail
여러 인수를 받아들일 수 없는 경우:
head -n 999999 -- *
(일부 head -n -0 -- *
이지만 표준도 아닙니다).
head
/의 GNU 구현은 파일 이름만 주어진 경우에도 헤더가 인쇄되도록 / 옵션 tail
도 허용합니다 .-v
--verbose
--
파일 이름 중 하나는 로 덮어야 합니다 -
. /라는 파일은 -
여전히 stdin으로 처리됩니다. 을 사용하면 이 문제를 해결할 수 있지만 접두사가 출력 헤더에 포함된다는 의미입니다.head
tail
./*
./
답변2
다음 방법으로 이 모든 작업을 한 번에 수행할 수 있습니다 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 {} \+
답변3
현재 폴더에 있는 모든 파일의 내용을 표시하려면 다음을 시도하십시오.
grep -vI "\x00" -- *
유사하지만 재귀적입니다.
grep -vIr "\x00" -- .
형식은 다음과 같습니다 filename: content
.
제안된 것과 유사한 형식을 가지려면 다음과 같습니다.
grep -rvl "\x00" -- * | while read file; do printf "\n\n#### $file ####\n"; cat $file; done
참고 사항:
- 위의 예에서 NUL()을 사용하면
\x00
바이너리가 표시되는 것을 방지할 수 있습니다(-I
실제로는 그렇게 하지만 일부 패턴을 사용해야 합니다). - 와일드카드(
*
)를 사용하면 숨겨진 파일을 자동으로 무시합니다.htaccess
.
또한보십시오:grep: 파일 이름을 한 번 표시한 다음 줄 번호로 컨텍스트를 표시합니다.유닉스 SE에서
답변4
반복적으로 인쇄하려는 경우(예: .sql 확장자를 가진 파일의 경우):
find -name "*.sql" -exec cat {} \; > all.sql