我正在尝试从一个巨大的tar文件中提取使用通配符的列表中的某些文件。我正在使用循环读取列表,但是从列表中的一个元素传递到下一个元素花费的时间太长,我猜测是因为试图通过整个tar文件匹配该元素。我希望任何元素匹配2次后,循环继续下一个。
while read line;do
tar --wildcards -xzvf file.tar.gz "$line"
done <$file
一行看起来像这样
dataset/0113947.*
答案 0 :(得分:1)
一旦发现两个文件,我就积极地杀死tar进程。这是我的解决方法
file=list.txt
while read line;do
tar --wildcards --checkpoint=10000 --checkpoint-action=exec='sh stop.sh dummy.txt 1' -xzvf ny_file.tar.gz "$line" > dummy.txt
done <$file
stop.sh在其中检查dummy.txt是否超过两行并杀死该进程。
n=$(wc -l < $1)
if [ $n -gt 1 ];then
kill $(ps aux|grep "[t]ar --wildcards*" | cut -d " " -f 4)
fi
我不得不使用cut来恢复ID进程,因为awk的单引号很麻烦