각 .tgz 파일의 총 줄 수를 얻는 데 도움이 될 수 있는 다음 게시물을 보았지만 모든 것이 아니라 이 압축된 .tgz 폴더에 있는 .js 파일의 줄 수만 계산하고 싶습니다. 어떻게 해야 합니까?
답변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
어떻게 작동하나요?
-x
tar에게 파일을 추출하라고 지시합니다.-f file.tgz
tar에서 추출하도록 지시합니다file.tgz
.--to-command='echo "$TAR_FILENAME $(wc -l)"'
추출된 각 파일에 이 명령을 적용하도록 tar에 지시합니다. Tar는 환경 변수에 각 파일의 이름을 제공합니다$TAR_FILENAME
.--wildcards
tar에게 glob을 사용하여 추출할 파일을 선택하도록 지시합니다.'*.js'
추출할 파일 glob을 지정합니다.