我有一个.tar.gz文件的列表,具有相同的内部文件夹结构,我想批量gunzip | 从分离的文件夹中解压出单个文件。
logs_2013-08-01.tar.gz
logs_2013-08-02.tar.gz
logs_2013-08-03.tar.gz
logs_2013-08-04.tar.gz
logs_2013-08-05.tar.gz
我知道解压一个文件的命令是
tar -xvf {tarball.tar} {path/to/file}
并添加-C来指定输出文件夹单个存档的命令如下所示:
tar -xvf logs_2013-08-01.tar.gz -C 2013-08-01/ /var/logs/audit
但是我怎么能做一个循环来解开一切?
你可以试试这个(在Linux / bash上testing):
for pkg in logs_*.tar.gz; do where="${pkg#logs_}" where="${where%.tar.gz}/" [ -d "$where" ] || mkdir "$where" tar zxfv $pkg -C "$where" /var/logs/audit done
简单地说,你循环当前所有的tgz档案,然后从它的名字中取出“date”部分,创build所需的目录并最终提取它们。
使用atool(1) 。 它已经包装了很多发行版。
赶紧跑:
$ atool -x -e *.tar.gz
解压缩和解压每个文件在自己的目录中。
你可以简单地循环这些文件
#!/bin/bash # Pass the name of the file to unpack on the command line $1 for file in *.gz do dir=$(echo "$file" | cut -c 6-15) tar -xvf "$file" -C "$dir" "$1" done