/mydata
여러 파일이 포함된 gz
폴더 가 있습니다 .
원본 zip을 유지하면서 다른 폴더에 모두 압축을 풀고 싶습니다./myoutput
어떻게 해야 하나요? 압축 해제 과정도 추적할 수 있나요?
감사해요!
답변1
gzip
, basename
및 루프를 사용하십시오 .
for pathname in /mydata/*.gz; do
gzip -dc "$pathname" >"/myoutput/$( basename "$pathname" .gz )"
done
이는 일치하는 모든 경로 이름에 대해 반복되며 , 각 이름에 대해 파일( )의 압축을 표준 출력( )으로 푸는 /mydata/*.gz
데 사용됩니다 . gzip
출력은 으로 리디렉션됩니다. 파일 이름은 원본 파일과 동일하지만 파일 이름 접미사가 없습니다(경로 이름에서 비트를 제거하고 초기 문자열을 제거하기 위해).-d
-c
/myoutput
.gz
basename
/mydata/
루프 내의 명령은 다음과 같이 작성할 수도 있습니다.
gzip -d -o "/myoutput/$( basename "$pathname" .gz )" "$pathname"
이렇게 하면 gzip
리디렉션을 통하지 않고 출력 파일을 직접 쓸 수 있습니다.
이는 아래 파일을 /mydata
읽을 수 있고 /myoutput
.
답변2
루트 바로 아래에 대상 디렉터리를 두고 싶다면 적절한 소유권(및 사용 권한)을 부여하세요.
sudo mkdir /myoutput sudo chown $USER /myoutput
디렉토리를 파일이 포함된 디렉토리로 변경합니다
gz
.cd /mydata
다음 명령줄을 실행하세요.
for i in *.gz;do echo -n "${i/.gz}|";zcat "$i" > "/myoutput/${i/.gz}";done; echo ""