Gunzipは、特定の拡張子を持つすべてのファイルを別のフォルダに圧縮します。

Gunzipは、特定の拡張子を持つすべてのファイルを別のフォルダに圧縮します。

.gz拡張子gzのファイル28個と拡張子28個のファイルを含むフォルダがあります.gz.bam

.gz28個のファイルをすべて解凍して別のフォルダに送信したいと思います。私は次のように一つずつしました。

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します。*gzgzこれが問題である場合は、代わりに彼の方法を使用してください。

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

関連情報