Gunzip 将具有给定扩展名的所有文件压缩到不同的文件夹中

Gunzip 将具有给定扩展名的所有文件压缩到不同的文件夹中

我有一个文件夹,其中包含 28 个扩展名为 gz 的文件.gz和 28 个扩展名为.gz.bam.

我想解压所有 28 个.gz文件并将它们发送到另一个文件夹。我是一一做的,如下:

gunzip -c file1.gz > /mnt/s3/data_transfer/file1

如何指定我想要 .gz 而不是 .gz.bam?

答案1

只需迭代它们:

for file in *gz; do
    gunzip -c -- "$file"  > /mnt/s3/data_transfer/"${file%.gz}"
done

is "${file%.gz}"shell 语法将返回 的值$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限定符来处理隐藏文件)。

相关内容