Você pode pedir ao tar para executar uma ação a cada poucos blocos no que eles chamam de pontos de verificação . Esta ação pode testar se o arquivo procurado foi extraído e, se assim for, matar o tar. Eu tentei usando um arquivo tar e parece funcionar ok.
Aqui está meu script de exemplo para fazer meu teste, tarring / usr / bin e extrair usr / bin / bash para / tmp / usr / bin / bash. O padrão - checkpoint é de 10 blocos.
#!/bin/bash
cat <<\! >/tmp/checkdone
#!/bin/bash
# env has TAR_CHECKPOINT TAR_ARCHIVE TAR_VERSION TAR_BLOCKING_FACTOR
# tar -C directory is NOT used for checkpoint action!
want=$1
if size=$(stat --printf='%s\n' "$want" 2>&1)
then if [ "$(</tmp/lastsize)" = "$size" -a -s /tmp/pid ]
then echo "same size $size. time to stop"
ls -l "$want"
>/tmp/lastsize
kill -1 $(</tmp/pid)
else echo "partial size $size"
echo "$size" >/tmp/lastsize
fi
else echo -n "."
fi
!
chmod +x /tmp/checkdone
>/tmp/lastsize
>/tmp/pid
tar -cf /tmp/tar /usr/bin/ # create example tar file
# wanted file. must be in current dir
want=usr/bin/bash
cd /tmp || exit # dont use tar -C dir
tar -xvf /tmp/tar "$want" --checkpoint=10 --checkpoint-action=exec="/tmp/checkdone $want" &
echo $! >/tmp/pid
wait
rm /tmp/tar /tmp/pid /tmp/lastsize /tmp/checkdone
rm -fr /tmp/usr