터미널 디렉토리에 있는 모든 파일의 파일 이름과 내용을 얻는 방법

터미널 디렉토리에 있는 모든 파일의 파일 이름과 내용을 얻는 방법

디렉터리에 알 수 없는 수의 파일이 있다고 가정합니다. 아래 예제와 같이 파일 이름과 함께 각 파일 내부의 내용을 가져오고 싶습니다.

file1 "파일 1의 내용"
file2 "파일 2의 내용"
file3 "파일 3의 내용"
................................... ..... ........ .filen
"파일 n의 내용"

어떻게 해야 하나요?

답변1

가설문서텍스트 형식이어야 하며 너무 크지 않아야 합니다(예: 10,000줄 미만).

그럼 당신은 사용해 볼 수 있습니다머리(1)(아마도 head -vn -0 file*GNU 헤더와 동일할 것입니다)

head -10000 file1 file2 file3

일부 파일은 바이너리입니다. 즉, 텍스트 이외의 콘텐츠가 포함되어 있다는 점에 유의하세요. 예를 들어,코어 덤프, 하나SQLite데이터베이스 파일,파푸아 뉴기니이미지,실행 가능 파일파일 그리고 심지어 일부문서 열기LibreOffice를 사용하여 만든 파일입니다. 그러한 파일에서는 head(또는고양이(1)) 그렇지 않기 때문에 좋은 결과를 얻지 못할 것입니다.텍스트 파일그러나 거의 모든 바이트 시퀀스를 포함합니다.

당신이 옳을 수도 있습니다파일 1)주문하다. 주어진 파일의 콘텐츠 유형을 추측하려고 시도합니다. 다음 내용도 읽어보세요.매체 유형(또는 MIME 유형)

Unix 계열 시스템에서 파일은 실제로아이노드그리고 가질 수 있다일부이름 (참조인덱스 노드(7),링크(2),ln(1)더 알아보기). 파일명은 큰 의미가 없습니다. 파일은 기본적으로 어떤 방식으로든 이름이 지정된 일련의 바이트입니다. 이 시퀀스가 ​​사용되는 방법은 파일에 액세스하는 프로그램에 따라 다릅니다.

xdg-open다양한 유형의 파일(내용을 조정하는)을 그래픽으로 표시하는 방식에 관심이 있을 수 있습니다 .

다음 내용도 읽어보세요.와일드카드. 바라보다글로벌(7). for내장된 기능에 대해 알아보세요.껍데기. 읽다bash 루프 구조.

답변2

특정 출력 형식의 경우 다음을 수행할 수 있습니다.

awk '{print substr(FILENAME, 3)" \""$0"\" "}' ./file*

그러면 파일 이름과 파일의 각 줄에 대한 따옴표 안의 줄 내용이 인쇄됩니다.

인수를 파일 이름이 아닌 변수 할당 으로 처리하는 문제를 해결하기 위해 접두사를 추가 ./하고 제거합니다 .substr()awkfilex=y.txt

파일에 이미 문자가 포함되어 있고 해당 문자를 다음과 같이 표시 (및 명확하게 ) "하려는 경우:\"\\\

awk '{gsub(/[\\"]/, "\\\\&"); print substr(FILENAME, 3)" \""$0"\" "}' ./file*

"(이것은 파일 이름 자체와 는 관련이 없습니다 ).

답변3

이렇게 하면 트릭을 수행할 수 있습니다.

for f1 in *; do echo -n "$f1"" "\"; cat "$f1"; echo "\""; done

디렉터리의 모든 파일을 반복한 다음 각 파일에 대해 이름과 내용을 따옴표로 묶어 표시합니다.

관련 정보