Q&A – jak wypakować katalog/plik z dużego archiwum?

Przypadkowe skasowanie pliku, to częste zgłoszenie, z jakim spotyka się administrator. Na ogół oczywiście nie jest to skasowanie pliku przez niego samego, a przez któregoś użytkownika. A im więcej użytkowników administrator ma na serwerach, tym prawdopodobieństwo takiego zdarzenia jest większe.

Każdy wie, jak wypakować  katalog/plik z archiwum - jeden szybko użyje do tego celu np. Midnight Commandera, znajdzie i wypakuje, co trzeba, inny ręcznie rozpakuje całe archiwum, przywróci co trzeba i usunie zbędne już dane, ale optymalnym rozwiązaniem rozwiązaniem w przypadku bardzo dużego archiwum jest wypakowanie tylko interesujących nas danych - nie tylko ze względu na czas odzyskiwania, ale również z powodu np. ograniczenia wolnego miejsca na dyskach, szybkości dysków, czy obciążenia pracującego systemu.

Narzędzie tar posiada oczywiście taką funkcjonalność, więc pokażę na krótkim przykładzie, jak:

1. Podglądamy archiwum:

$ tar tf archiwum.tar
archiwum/
archiwum/katalog2/
archiwum/katalog2/plik2.png
archiwum/katalog2/plik1.png
archiwum/katalog2/plik3.png
archiwum/katalog1/
archiwum/katalog1/plik2.png
archiwum/katalog1/plik1.png
archiwum/katalog1/plik3.png
archiwum/katalog3/
archiwum/katalog3/plik2.png
archiwum/katalog3/plik1.png
archiwum/katalog3/plik3.png

2. Rozpakowujemy wybrany katalog:

$ tar xvf archiwum.tar archiwum/katalog2/
archiwum/katalog2/
archiwum/katalog2/plik2.png
archiwum/katalog2/plik1.png
archiwum/katalog2/plik3.png

3. Rozpakowujemy wybrany plik:

$ tar xvf archiwum.tar archiwum/katalog3/plik1.png
archiwum/katalog3/plik1.png

4. Upewniamy się, że odzyskaliśmy to, co chcieliśmy:

$ ls -R archiwum/
archiwum/:
katalog2 katalog3

archiwum/katalog2:
plik1.png plik2.png plik3.png

archiwum/katalog3:
plik1.png

Powyższa logika działa również dla archiwów gzip (przełącznik 'z'), bzip2 (przełącznik 'j') itd.

Na koniec drobna uwaga (zdarzyło mi się odruchowo kilka razy popełnić ten drobny błąd) - przy rozpakowaniu należy użyć ścieżki względnej, a nie bezwzględnej, czyli bazując na przykładzie - należy użyć:

$ tar xvf archiwum.tar archiwum/katalog2/

zamiast:

$ tar xvf archiwum.tar /archiwum/katalog2/

Ale oczywiście w przypadku jego popełnienia narzędzie tar nas poinformuje o naszej niefrasobliwości. :)