tgz 압축 파일에서 특정 파일 형식의 줄 수를 계산하는 방법은 무엇입니까?

tgz 압축 파일에서 특정 파일 형식의 줄 수를 계산하는 방법은 무엇입니까?

각 .tgz 파일의 총 줄 수를 얻는 데 도움이 될 수 있는 다음 게시물을 보았지만 모든 것이 아니라 이 압축된 .tgz 폴더에 있는 .js 파일의 줄 수만 계산하고 싶습니다. 어떻게 해야 합니까?

https://stackoverflow.com/questions/22064932/count-number-of-lines-of-gz-files-recursviely-on-directory

답변1

stdout과 일치하는 모든 파일을 추출 *.js하고 이를 사용하여 wc -l행 수를 계산하려고 합니다.

tar -x -f file.tgz -O --wildcards '*.js' | wc -l

-O파일을 디스크에 쓰는 대신 stdout으로 출력합니다(tar가 일반적으로 수행하는 것처럼).

--wildcards추출된 파일 이름에 와일드카드를 사용할 수 있습니다(Linux에서는 GNU만 사용할 수 있지만).

그러면 tar 파일이 생성됩니다. 둘 이상이 있는 경우 루프에서 이 작업을 수행하고 루프의 출력을 wc -l.

답변2

.js압축된 tar 아카이브에 있는 각 파일의 줄 수를 얻으려면 다음을 시도하십시오.

tar -xf file.tgz --to-command='echo " $TAR_FILENAME $(wc -l)"' --wildcards '*.js'

데모로서 다음 아카이브부터 시작해 보겠습니다.

$ tar --list -f file.tgz
a.js
dir1/
dir1/b.js
other.txt

이제 아카이브에 있는 각 js 파일의 줄 수를 알아봅시다.

$ tar -xf file.tgz --to-command='echo " $TAR_FILENAME $(wc -l)"' --wildcards '*.js' 
 a.js 10
 dir1/b.js 15

개선하다

더 나은 출력 형식을 원한다면 다음을 printf사용할 수 있습니다 echo.

$ tar -xf file.tgz --to-command='printf "%-10s %s\n" "$TAR_FILENAME" "$(wc -l)"' --wildcards '*.js' 
a.js       10
dir1/b.js  15

어떻게 작동하나요?

  • -xtar에게 파일을 추출하라고 지시합니다.

  • -f file.tgztar에서 추출하도록 지시합니다 file.tgz.

  • --to-command='echo "$TAR_FILENAME $(wc -l)"'추출된 각 파일에 이 명령을 적용하도록 tar에 지시합니다. Tar는 환경 변수에 각 파일의 이름을 제공합니다 $TAR_FILENAME.

  • --wildcardstar에게 glob을 사용하여 추출할 파일을 선택하도록 지시합니다.

  • '*.js'추출할 파일 glob을 지정합니다.

관련 정보