Jak wyodrębnić pojedynczy folder z dużego archiwum tar.gz?

Używam tego polecenia na 5 GB archiwum

tar -zxvf archive.tar.gz /folder/in/archive 

Czy to jest właściwy sposób na zrobienie tego? Wydaje się, że trwa to wieczność bez wyjścia wiersza poleceń …

Komentarze

  • Czy użyłeś ścieżki bezwzględnej czy względnej? Powinien być względny, poza tym, że wygląda dobrze. Jak długo pozwalałeś mu działać i jak dobry jest twój system? Na szybkim komputerze zajmie to co najmniej kilka minut. Potencjalnie godzinę lub dłużej? ' m przeprowadzam teraz test.
  • Tak, zakończył się po ~ 1 godzinie, ale ścieżka bezwzględna była błędna, miałeś rację.
  • W systemie Linux możesz obserwować, jak daleko w archiwum tar znajduje się cat /proc/$(pidof tar)/fdinfo/0 (dostosuj polecenie, jeśli masz więcej niż jedno tar proces w toku).
  • Ważną częścią jest również brak końcowego ukośnika. Korzystanie z folder/folder2/ won ' t działa.

Odpowiedz

tar przechowuje ścieżki względne domyślnie . GNU tar mówi nawet, że jeśli spróbujesz zapisać ścieżkę bezwzględną:

tar -cf foo.tar /home/foo tar: Removing leading `/" from member names 

Jeśli chcesz wyodrębnić określony folder, spójrz, co się w nim znajduje plik tar:

tar -tvf foo.tar 

I zanotuj dokładną nazwę pliku. W przypadku mojego pliku foo.tar mógłbym wyodrębnij /home/foo/bar, mówiąc:

tar -xvf foo.tar home/foo/bar # Note: no leading slash 

Więc nie, sposób, w jaki publikowałeś, nie jest (koniecznie) prawidłowy sposób na zrobienie tego. Musisz pominąć początkowy ukośnik. Jeśli chcesz symulować ścieżki bezwzględne, najpierw wykonaj cd / i upewnij się, że jesteś „superużytkownikiem”. Robi to to samo:

tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option 

Istnieją bardzo oczywiste, dobre powody, dla których tar konwertuje ścieżki na względne. Jednym z nich jest możliwość przywrócenia archiwum w miejscach innych niż jego oryginalne źródło. innym jest bezpieczeństwo. Możesz wypakować archiwum, oczekiwać, że jego pliki pojawią się w twoim bieżącym katalogu roboczym, a zamiast tego przez pomyłkę nadpisać pliki systemowe (lub własną pracę) w innym miejscu.

Uwaga: jeśli używasz -P opcja, tar będzie archiwizować ścieżki bezwzględne. Dlatego zawsze opłaca się sprawdzić zawartość dużych archiwów przed wypakowaniem.

Komentarze

  • --strip-components=N może być przydatne dla niektórych tutaj.
  • w moim przypadku konieczne było wpisanie ./foldername/ zamiast , wydaje mi się, że to dlatego, że kiedy utworzyłem tar, utworzyłem go za pomocą tar -cvf santi.tar ./* i kiedy " wymieniony " tar, oto co powiedział drwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
  • I o .gz?
  • @PeterKrauss zmień -xvf na -xzvf (dodając -z) i oczywiście foo.tar do foo.tar.gz lub jakkolwiek nazywa się twoje archiwum. To samo dotyczy -j (bz2) i niektórych ostatnich wersji, -J (xz). W przeciwnym razie działa również potok taki jak zcat foo.tar.gz | tar -xvf - ….
  • I pamiętaj, że jeśli masz dość szczegółowych informacji wyjściowych podczas wyodrębniania, po prostu pomiń v we wszystkich przykładach. Np. tar -tf foo.tar i tar -xf foo.tar ....

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *