for 루프를 사용하여 폴더의 모든 파일(파일 이름 포함)을 캡처하시겠습니까?

for 루프를 사용하여 폴더의 모든 파일(파일 이름 포함)을 캡처하시겠습니까?

이 for 루프를 셸에서 직접 실행하면 폴더에 있는 모든 파일의 내용을 캡처하고 그 옆에 값을 표시할 수 있습니다.

$ for f in *; do echo -e "\t"$f"\n"; cat $f; done

출력 예:

100 
    testfile1
    testfile3      <-No output because this file is empty
hello 
    testfile2

하지만 다음과 같이 파일의 오른쪽과 왼쪽 상단에 값을 인쇄하고 싶습니다.

testfile1 
    100
testfile3
testfile2
    hello

echo와 cat의 위치를 ​​바꾸려고 시도했지만 작동하지 않았습니다. 다른 명령과 똑같이 작동합니다.

$ for f in *; cat $f; do echo -e "\t"$f"\n"; done

이 목표를 어떻게 달성할 수 있나요?

답변1

for f in *; do
  printf '%s\n' "$f"
  paste /dev/null - < "$f"
done

파일 이름과 그 내용이 인쇄되며, 디렉토리의 각 파일에 대해 각 줄 앞에는 탭 문자가 표시됩니다.

GNU와 동일 awk:

gawk 'BEGINFILE{print FILENAME};{print "\t" $0}' ./*

또는 빈 파일의 이름을 인쇄하지 마세요(GNU에만 해당되는 것은 아닙니다).

awk 'FNR==1 {print FILENAME}; {print "\t" $0}' ./*

또는 GNU를 사용하십시오 sed:

sed -s '1F;s/^/\t/' ./*

답변2

for f in *; do echo -e "$(cat $f)\t"$f; done 

답변3

가능한 해결책을 찾았습니다.

for f in *; do echo -e $f"\n\t$(cat $f)"; done

관련 정보