我有一个脚本需要在大量文件上运行,扩展名为**。tar.gz *。
我希望能够在运行命令时解压缩它们,然后使用单个命令处理未压缩的文件夹,而不是解压缩它们。
我认为管道是一个很好的解决方案,但我以前没用过它。我该怎么做?
答案 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