即时解压缩大量文件

时间:2010-09-06 10:45:01

标签: linux bash command-line pipe tar

我有一个脚本需要在大量文件上运行,扩展名为**。tar.gz *。

我希望能够在运行命令时解压缩它们,然后使用单个命令处理未压缩的文件夹,而不是解压缩它们。

我认为管道是一个很好的解决方案,但我以前没用过它。我该怎么做?

3 个答案:

答案 0 :(得分:1)

-v订单tar在提取每个文件时打印文件名:

tar -xzvf file.tar.gz | xargs -I {} -d\\n myscript "{}"

这样,脚本将包含处理单个文件的命令,作为参数(感谢xargs)传递给脚本(脚本上下文中为$1)。

编辑:-I {} -d\\n部分将使其适用于文件名中的空格。

答案 1 :(得分:1)

以下三行bash ......

for archive in *.tar.gz; do
    tar zxvf "${archive}" 2>&1 | sed -e 's!x \([^/]*\)/.*!\1!' | sort -u | xargs some_script.sh
done

...将遍历当前目录中的每个gzipped tarball,对其进行解压缩,获取解压缩内容的最顶层目录,并将这些目录作为参数传递给somescript.sh。这可能会使用比您预期更多的管道,但似乎可以满足您的要求。

N.B:tar xf每次调用只能占用一个文件。

答案 2 :(得分:0)

您可以使用for循环:

for file in *.tar.gz; do tar -xf "$file"; your commands here; done

或扩展:

for file in *.tar.gz; do
    tar -xf "$file"
    # your commands here
done