如何一次将多个文件压缩到特定文件夹?

如何一次将多个文件压缩到特定文件夹?

我有一个/mydata包含多个gz文件的文件夹。

我想将它们全部解压缩(同时保留原始压缩包)到另一个文件夹/myoutput

我怎样才能做到这一点?我也可以跟踪解压过程吗?

谢谢!

答案1

使用gzipbasename和循环:

for pathname in /mydata/*.gz; do
    gzip -dc "$pathname" >"/myoutput/$( basename "$pathname" .gz )"
done

这将迭代所有匹配的路径名/mydata/*.gz,并且对于每个这样的名称,它将用于将文件gzip解压缩( )到标准输出( )。输出被重定向到.文件名将与原始文件相同,但没有文件名后缀(用于从路径名中删除该位,以及删除初始字符串)。-d-c/myoutput.gzbasename/mydata/

循环内的命令也可以写成

gzip -d -o "/myoutput/$( basename "$pathname" .gz )" "$pathname"

这将允许gzip直接写入输出文件,而不是通过重定向。

这假设下面的文件/mydata是可读的,并且您有权在/myoutput.

答案2

  • 如果您确实想要直接在根目录下的目标目录,请为其提供合适的所有权(和权限)

    sudo mkdir /myoutput
    sudo chown $USER /myoutput
    
  • 将目录更改为包含文件的目录gz

    cd /mydata
    
  • 运行以下命令行

    for i in *.gz;do echo -n "${i/.gz}|";zcat "$i" > "/myoutput/${i/.gz}";done; echo ""
    

相关内容