![Gunzip은 특정 확장자를 가진 모든 파일을 다른 폴더로 압축합니다.](https://linux55.com/image/211929/Gunzip%EC%9D%80%20%ED%8A%B9%EC%A0%95%20%ED%99%95%EC%9E%A5%EC%9E%90%EB%A5%BC%20%EA%B0%80%EC%A7%84%20%EB%AA%A8%EB%93%A0%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%8B%A4%EB%A5%B8%20%ED%8F%B4%EB%8D%94%EB%A1%9C%20%EC%95%95%EC%B6%95%ED%95%A9%EB%8B%88%EB%8B%A4..png)
.gz
확장자가 gz인 파일 28개와 확장자가 28개 파일이 포함된 폴더가 있습니다 .gz.bam
.
.gz
28개의 파일을 모두 압축을 풀고 다른 폴더로 보내고 싶습니다 . 저는 다음과 같이 하나씩 했습니다.
gunzip -c file1.gz > /mnt/s3/data_transfer/file1
.gz.bam 대신 .gz를 사용하도록 지정하려면 어떻게 해야 합니까?
답변1
그냥 반복해보세요:
for file in *gz; do
gunzip -c -- "$file" > /mnt/s3/data_transfer/"${file%.gz}"
done
is "${file%.gz}"
쉘 구문은 값을 반환 $file
하고 마지막 값을 제거합니다 .gz
.
이 빠르고 더러운 방법은 아래 Stéphane의 방법만큼 강력하지 않습니다. 파일이 없는 디렉터리에서 실행하면 패턴 자체를 압축하려고 gz
시도합니다 . *gz
. gz
이것이 문제라면 대신 그의 방법을 사용하십시오.
답변2
그리고 bash
:
(
ret=0
shopt -s nullglob
for file in *.gz; do
gunzip < "$file" > /mnt/s3/data_transfer/"${file%.gz}" || ret="$?"
done
exit "$ret"
)
( dotglob
숨겨진 파일, 즉 이름이 로 시작하는 파일도 처리하려는 경우 .gz
에도 이 옵션을 설정하십시오 .
.)
존재하다 zsh
:
(
ret=0
for file (*.gz(N.)) gunzip < $file > /mnt/s3/data_transfer/$file:r || ret=$?
exit $ret
)
(또한 .
glob 확장을 제한하기 위해 glob 한정자를 추가합니다.정기적인파일, D
숨겨진 파일을 처리하기 위한 한정자를 추가합니다.