Найти, когда tar находит n совпадений, используя подстановочные знаки - PullRequest
1 голос
/ 22 июня 2019

Я пытаюсь извлечь из огромного tar-файла некоторые файлы из списка, в которых используются подстановочные знаки.Я использую цикл для чтения списка, но переход от одного элемента в списке к следующему занимает слишком много времени, я предполагаю, потому что пытаюсь сопоставить элемент через весь файл tar.Я хочу, чтобы после 2 совпадений для любого элемента цикл продолжался со следующего.

while read line;do
 tar --wildcards  -xzvf file.tar.gz "$line"
done <$file

И одна строка выглядит так

dataset/0113947.*

1 Ответ

1 голос
/ 22 июня 2019

Я стал агрессивным и убил процесс 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 для восстановления процесса идентификации, потому что одиночные кавычки для awk беспокоили

...