.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
隠しファイルを処理するための修飾子を追加します。