我试图从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进程。有关为什么会这样的想法?
谢谢!
答案 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
其中(至少我认为)会添加您的标准,仅在文件已存在的情况下提取文件并且是常规文件。