tar命令的Bash脚本包装器需要很长时间才能执行

时间:2014-05-16 17:59:17

标签: linux bash shell

我试图从tar文件中提取感兴趣的特定文件(~50Gb)。当我从命令行手动提取文件时,它需要很短的时间(1-2s)。当我尝试通过bash脚本处理它以自动化要提取的特定文件时,脚本会在tar提取时挂起。我知道它挂在这里因为我可以杀死tar进程并且脚本继续。文件被提取,因为我可以"查看"脚本仍在等待tar进程返回时的文件和内容。

以下是代码片段:

for line in $contents
do
    if [ -f $line ]; then
            /bin/tar xf $tarfile -C $tmp $line
    fi
done

我试图为tar提取创建一个子shell,但后来我有100个挂起的tar进程。有关为什么会这样的想法?

谢谢!

2 个答案:

答案 0 :(得分:3)

提取时,您可以向tar提供多个文件名参数,所以:

/bin/tar xf $tarfile -C $tmp $contents

您必须在tar文件中搜索要提取的每个文件。如果提取文件需要1-2秒,并且您想要提取50个文件,则需要50-100秒。

通过一次提供所有文件名,它只扫描tarfile一次,并在遇到它时提取每个文件。

答案 1 :(得分:1)

尝试:

echo $contents | xargs find $start_directory -type f -name | xargs tar xvf $tarfile -C $tmp

其中(至少我认为)会添加您的标准,仅在文件已存在的情况下提取文件并且是常规文件。