.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
숨겨진 파일을 처리하기 위한 한정자를 추가합니다.