Jak wyodrębnić za pomocą tar do innego katalogu?

18

To nie działa:

tar xf /tmp/foo.tar.gz foo/bar
tar: foo/bar: Not found in archive

Nie jest dla mnie oczywiste, co by to zrobiło poza wyodrębnieniem go i przeniesieniem plików.

Kit Sunde
źródło

Odpowiedzi:

28

Od man tar:

     -C directory
         In c and r mode, this changes the directory before adding the
         following files.  In x mode, change directories after opening the
         archive but before extracting entries from the archive.

tzn. tar xC /foo/bar -f /tmp/foo.tar.gzpowinien wykonać pracę. (na FreeBSD, ale tar GNU jest zasadniczo taki sam pod tym względem, patrz „Zmiana katalogu roboczego” w podręczniku )

sr_
źródło
4
Polecam przetestować to zachowanie z wersjami tar nie-GNU . Strona podręcznika Solaris wspomina tylko o tej opcji w połączeniu z operacjami dodawania i zastępowania . Będąc ciekawym przetestowałem go przy pomocy operacji wyodrębniania . Solaris' tar czy nie wydać żadnego błędu lub ostrzeżenia i rozpakowaniu archiwum w bieżącym folderze =: - /
KTF
1
Nie działa również w wersji tar systemu AIX: „Plik -C nie jest obecny w archiwum” - „-C” działa przy tworzeniu plików tar.
DarkHeart
Czy można zamienić główny katalog na nową nazwę?
tofutim,
9

jeśli chcesz wyodrębnić archiwum tar w innym miejscu, po prostu cd do katalogu docelowego i rozpakuj go tam:

 mkdir -p foo/bar
 cd foo/bar
 tar xzvf /tmp/foo.tar.gz

Użyte polecenie przeszuka plik foo/barw archiwum i rozpakuje go.

ktf
źródło
9

Robić:

(cd foo/bar ; tar xf /tmp/foo.tar.gz )

wykonałby zadanie.

Zasadniczo polega na spawnowaniu nowej powłoki (nawiasów), w tej podpowłoce zmień katalog na, foo/bara następnie rozpakuj plik.

Można zmienić ;przez &&aby mieć pewność, że cddobrze działa.

jfg956
źródło
1
Wow, że możesz uruchomić taką powłokę, to całkiem fajne! Nie miałem pojęcia, że ​​możesz to zrobić.
Kit Sunde
0
tar -xf ancd.tar.gz my/name/file

możesz podać nazwę pliku ./filepo pliku tar.

tar -xf ancd.tar.gz ./my/name/file

jeśli działa, oznacza to, że utworzyłeś tar za pomocą ./. użyj mniej polecenia, aby zobaczyć zawartość tar.

less ...tar.file  
użytkownik2761565
źródło
0

Natrafiłem na coś, co wydaje się być podobnym problemem i rozwiązałem go.

Problem polegał na tworzeniu pliku, a nie na utworzonym pliku.

Podczas próby tarowania i przesłania pliku w katalogu A podałem ścieżkę do oryginalnego pliku w poleceniu tar

tar -cvf MyFile.tar /foo/bar/dir/not/needed/path/*

To, co udało mi się rozwiązać, to

cd /foo/bar/dir/not/needed/
tar -cvf /tmp/MyFile.tar path*

Po przesłaniu i wyodrębnieniu archiwum tar tworzone są wymagane podkatalogi.

tar -xvf MyFile.tar
OtisM
źródło
0

Zmień katalog, do którego chcesz wyodrębnić

cd /u02/restore

jeśli położenie pliku wyodrębnionego w /u01/backup.tar, to

Wyodrębnij w następujący sposób:

cd /u02/restore
tar -xvf /u01/backup.tar
Teja
źródło
0

Komenda:

tar -xzvf foo.tar.gz -C /home/user/bar/

rozpakuje plik wejściowy „foo.tar.gz” do katalogu /home/user/barpodczas drukowania przetworzonych plików.

tzabal
źródło