
각 .tgz 파일의 총 줄 수를 얻는 데 도움이 되는 아래 게시물을 보았지만 이 압축된 .tgz 폴더에 있는 .js 파일의 줄 수만 계산하고 싶습니다. 어떻게 해야 하나요?
답변1
*.js
stdout과 일치하는 모든 파일을 추출 하고 wc -l
행 수를 계산하는 데 사용하려고 합니다.
tar -x -f file.tgz -O --wildcards '*.js' | wc -l
-O
파일을 디스크에 쓰는 대신 stdout으로 출력합니다(tar가 일반적으로 수행하는 것처럼).
--wildcards
추출된 파일 이름에 와일드카드를 사용할 수 있습니다(그리고 이는 GNU 전용일 가능성이 높지만 Linux에서는 사용할 수 있습니다).
그러면 단일 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
작동 원리
-x
tar에게 파일을 추출하라고 지시합니다.-f file.tgz
tar에게 에서 추출하라고 지시합니다file.tgz
.--to-command='echo "$TAR_FILENAME $(wc -l)"'
tar에게 추출된 각 파일에 이 명령을 적용하도록 지시합니다. Tar는 환경 변수에 각 파일의 이름을 제공합니다$TAR_FILENAME
.--wildcards
tar에게 glob을 사용하여 추출할 파일을 선택하도록 지시합니다.'*.js'
추출할 파일 glob을 지정합니다.