폴더에 있는 모든 .tgz 파일의 압축을 풀고 다른 명명 규칙을 사용하여 새 파일을 작성하는 방법

폴더에 있는 모든 .tgz 파일의 압축을 풀고 다른 명명 규칙을 사용하여 새 파일을 작성하는 방법

많은 내용이 포함된 폴더가 있습니다..tgz파일, 압축되지 않은 각 파일에는동일한파일 이름"000000_0".

누군가 나에게 다음을 수행하는 명령을 작성할 수 있습니까?

1. Untar all the .tgz files from a folder
2. rename each uncompressed file based on the .tgz file name

예를 들어, 2017-07-01.tgz -> 압축되지 않은 파일의 이름을 "2017-07-01.dat"

내 디렉터리에 .tgz 파일 목록이 있다고 가정해 보겠습니다.

2017-07-01.tgz
2017-07-02.tgz
2017-07-03.tgz
2017-07-04.tgz
2017-07-05.tgz

참고: 각 .tgz 파일에는 파일이 하나만 있습니다.000000_0".

답변1

사용 gnu parallel:

$ parallel 'tar -xf {} --to-stdout > {.}.dat' ::: *.tgz

.tgz파일에 대해 파일이 압축 해제되고( -xf) 파일 내용이 stdout으로 스트리밍됩니다( --to-stdout). 따라서 >압축된 파일을 기본 이름 ({.}.dat

아니요 gnu parallel:

for file in *.tgz; do 
tar -xf $file --to-stdout > $(basename -s .tgz $file).dat;
done

basename버전이 너무 오래된 경우 이 -s매개변수가 존재하지 않습니다. 대신 사용하십시오 $(basename $file .tgz). 이는 현재 버전에서도 작동합니다.

관련 정보