我有一个/mydata
包含多个gz
文件的文件夹。
我想将它们全部解压缩(同时保留原始压缩包)到另一个文件夹/myoutput
我怎样才能做到这一点?我也可以跟踪解压过程吗?
谢谢!
答案1
使用gzip
、basename
和循环:
for pathname in /mydata/*.gz; do
gzip -dc "$pathname" >"/myoutput/$( basename "$pathname" .gz )"
done
这将迭代所有匹配的路径名/mydata/*.gz
,并且对于每个这样的名称,它将用于将文件gzip
解压缩( )到标准输出( )。输出被重定向到.文件名将与原始文件相同,但没有文件名后缀(用于从路径名中删除该位,以及删除初始字符串)。-d
-c
/myoutput
.gz
basename
/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 ""