Mam duży plik tar, który jest zajęty przesyłaniem FTP ze zdalnego systemu do naszego lokalnego systemu.
Chcę wiedzieć, czy można rozpocząć rozpakowywanie, powiedzmy 50 plików jednocześnie, aby pliki te mogły być przetwarzane podczas przesyłania.
Mam duży plik tar, który jest zajęty przesyłaniem FTP ze zdalnego systemu do naszego lokalnego systemu.
Chcę wiedzieć, czy można rozpocząć rozpakowywanie, powiedzmy 50 plików jednocześnie, aby pliki te mogły być przetwarzane podczas przesyłania.
Odpowiedzi:
Oto szczegółowe wyjaśnienie, w jaki sposób można wyodrębnić określone pliki z archiwum. W szczególności GNU tar może być użyty do wyodrębnienia jednego lub więcej plików z tarballa. Aby wyodrębnić określonych członków archiwum, podaj ich dokładne nazwy jako argumenty.
Na przykład:
tar --extract --file={tarball.tar} {file}
Możesz także wyodrębnić pliki, które pasują do określonego wzorca globowania (symbole wieloznaczne). Na przykład, aby wyodrębnić z cbz.tar wszystkie pliki zaczynające się od pic, bez względu na ich prefiks katalogu, możesz wpisać:
tar -xf cbz.tar --wildcards --no-anchored 'pic*'
Aby wyodrębnić wszystkie pliki php, wprowadź:
tar -xf cbz.tar --wildcards --no-anchored '*.php'
Gdzie,
-x
: instruuje tar, aby wyodrębnił pliki.
-f
: określa nazwę pliku / nazwy pliku tarball.
-v
: Verbose (pokaż postęp podczas rozpakowywania plików).
-j
: filtruj archiwum przez bzip2, użyj do dekompresji plików .bz2.
-z
: filtruj archiwum przez gzip, użyj do dekompresji plików .gz.
--wildcards
: instruuje tar, aby traktował argumenty wiersza poleceń jako wzorce globowania.
--no-anchored
: informuje, że wzorce dotyczą nazw członków po dowolnym znaku / separatorze.
-t
listy, dopóki archiwum nie zostanie w pełni pobrane. W dowolnym momencie na liście wyświetlane są tylko nazwy plików, które zostały lub są przenoszone, tj. nie pełna lista; dopóki nie zostanie w pełni pobrany.
Nie próbowałem tego sam, ale co z tym:
tar xvf archive.tar | head -n50
Tar wysyła linię do STDOUT dla każdego wyodrębnionego pliku, a następnie head
polecenie zabije potok po 50 liniach. Po śmierci fajki spodziewałbym się, że smoła też umrze.
head
. Pozwól mi zmienić moją odpowiedź.
tar
może wyodrębnić więcej niż 50 plików przed SIGPIPEd, aw szczególności może wyodrębnić ostatni, niekompletny plik.
tar -tvf tarfile.tar
daje ci całą listę plików w tarfile.tar
tar -xvf tarfile.tar fileToRestore
To polecenie przywraca fileToRestore
Aby rozpakować wiele plików, ale nie wszystkie, możesz:
Umieszczasz wszystkie listy plików z tarfile.tar
wtar.txt
tar -tvf tarfile.tar > tar.txt
Teraz tar.txt
ma całą listę plików tarfile.tar
i możesz zostawić tylko pliki, które chcesz przywrócić lub z głową ...
head -n50 tar.txt > tar2.txt
Możesz umieścić te linie w pliku
cat tar.txt|while read line
do
tar -xvf tarfile.tar ${line}
done
Lub pełny plik skryptu:
#!/bin/bash
if [[ "$1" = "" || "$2" = "" ]]
then
echo ""
echo "Uso: untar-list.sh tarfile.tar listfile.txt"
echo ""
exit 1
fi
tarfile=$1
file=$2
if [[ ! -f ${tarfile} ]]
then
echo ""
echo "Archivo ${tarfile} no existe"
echo ""
exit 1
fi
if [[ ! -f ${file} ]]
then
echo ""
echo "Archivo ${file} no existe"
echo ""
exit 1
fi
cat ${file}|while read line
do
tar -xvf ${tarfile} ${line}
done
echo ""
echo "Finalizado"
echo ""
I to wszystko