循环遍历tar.gz中的文件

时间:2017-10-08 05:51:45

标签: bash unix

我有files.tar.gz里面有一堆csv文件,每个文件都有一个标题。我想循环遍历csv文件并一次处理一个。如果我只是zcat | tar -xO,那么我就无法识别每个文件的开头,从而识别其标题。

如何一次循环存档中的文件,并将它们分别传送到处理命令?

1 个答案:

答案 0 :(得分:1)

GNU tar实用程序可以使用

将存档中的单个文件提取到stdout

tar -O -x -z -f archive.tgz file

这是一个可以解决您的问题的循环,假设为每个文件运行tar并不是非常慢。

tar tzf files.tar.gz | while IFS= read -r f ; do 
   echo ">>> Processing file $f"
   tar Oxzf files.tar.gz "$f" | head | cat -n ;
done

command | while IFS= read -r line是一种BASH模式。当文件名中有空格时,清除IFS变量对于代码正常工作是必要的。