Również -C, --directory DIR\n change to directory DIRpowinien być raczej opisany jako change output directory to DIR (will fail if DIR doesn't exist). Dzięki @Mich. Zobacz także odpowiedź @ Bryan_Larsen.
ważne
1
@Ujjwal Sing: Rzeczywiście, strona man tar nie jest aż tak pomocna. Opisuje „-C DIR” jako „przejście do katalogu DIR”. Co gorsza: „tar -C mydir xf archive.tar” nie działa, podczas gdy „tar xf archive.tar -C mydir” nie działa.
Pat Morin,
@PatMorin Aby być uczciwym, gdy zrozumiesz argument, że konwencje wywoływania, których używasz, ma sens. Możesz także zrobić tar xfC archive.tar mydirlub tar -C mydir -xf archive.tar. Tylko mieszanie flag w stylu tradycyjnym i w stylu GNU niszczy rzeczy, ponieważ ... jest to całkiem oczekiwany rodzaj. Tradycyjne flagi są przekazywane jako jedna kropelka jako pierwszy argument. Nie możesz oczekiwać, że będą działać, jeśli nie będą pierwsi. (Mam na myśli, tak, i tak można to zinterpretować - chodzi mi o to, że byłoby ponad i poza, nie standardowe)
Nic Hartley,
Odpowiedzi:
958
Aby wyodrębnić archiwum do katalogu innego niż bieżący, użyj opcji -Club lub --directorytar, jak w
tar -xf archive.tar -C /target/directory
Pamiętaj, że katalog docelowy musi istnieć przed uruchomieniem tej komendy (może być utworzony przez mkdir /target/directory).
Przeczytaj stronę podręcznika (polecenie:), man taraby poznać inne opcje.
Czy ścieżkę można usunąć: tzn. Po prostu pobierz plik
zzapper
3
Jeśli jest to większy plik, po uruchomieniu polecenia nie otrzymasz danych wyjściowych przez kilka sekund, a nawet minut, gdy działa. Możesz to naprawić, dodając -vflagę ( tryb pełny ), która wyświetla nazwę każdego pliku podczas jego wyodrębniania.
IQAndreas,
Jeśli masz z tym kłopoty, zwróć również uwagę --strip-components=1na drugą odpowiedź.
Czy to nie dziwne, że po tylu latach, gdy wszystkie opcje tarsię zgromadziły, nadal nie ma możliwości utworzenia katalogu wyjściowego, jeśli nie istnieje ?
EM0
260
Zauważ, że jeśli twój plik tar zawiera już nazwę katalogu, który chcesz zmienić, dodaj --strip-components=1opcję:
tar xf archive.tar -C /target/directory --strip-components=1
Dziękuję Ci. Pliki do pobrania przez wget / etc zawsze mają katalog „nadrzędny”. Jest to kompletna odpowiedź imo - lub należy zauważyć w odpowiedzi powyżej.
bshea
Właśnie tego szukałem. --strip-componentsjest bardzo przydatny podczas uruchamiania dostawców, którzy mogą używać różnych wersji. W ten sposób /target/directorymoże być ogólna nazwa bez martwienia się o to, jak dostawca zdecydował się nazwać folder archiwum.
Jack_Hu
30
Łącząc poprzednie odpowiedzi i komentarze:
Aby po prostu wypakować zawartość i utworzyć katalog docelowy, jeśli go brakuje:
mkdir -p /target/directory && tar xf archive.tar -C /target/directory
Aby wyodrębnić, a także usunąć katalog główny (pierwszego poziomu) z zip
mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1
Oto odpowiedź, której potrzebowałem. Bardzo przydatne „nie”, aby określić nazwę katalogu lub pamiętać specjalny kod, który będzie odnosił się do pliku z nazwą. Dziękuję Ci.
Hipokrytus
2
Interesujące w odniesieniu do ekstrakcji jest to, że zależy to od sposobu utworzenia archiwum, zobacz ten przykład
cd /tmp
mkdir folder
touch folder/file.txt
kiedy to zrobisz, tar -zcvf folder.tar.gz folderwszystko jest zgodne z oczekiwaniami = kiedy je teraz rozpakowujesz, to zostanie rozpakowane (folder zostanie utworzony, jeśli go usuniesz) jako /tmp/folder/.
Ale kiedy utworzysz tar as tar -zcvf tmp-folder.tar.gz /tmp/folderi rozpakujesz go w folderze / tmp, wynikiem będzie /tmp/tmp/folderkatalog! W takim przypadku musisz to zrobić, aby / -tar -xf tmp-folder.tar.gz -C /
-C, --directory DIR\n change to directory DIR
powinien być raczej opisany jakochange output directory to DIR (will fail if DIR doesn't exist)
. Dzięki @Mich. Zobacz także odpowiedź @ Bryan_Larsen.tar xfC archive.tar mydir
lubtar -C mydir -xf archive.tar
. Tylko mieszanie flag w stylu tradycyjnym i w stylu GNU niszczy rzeczy, ponieważ ... jest to całkiem oczekiwany rodzaj. Tradycyjne flagi są przekazywane jako jedna kropelka jako pierwszy argument. Nie możesz oczekiwać, że będą działać, jeśli nie będą pierwsi. (Mam na myśli, tak, i tak można to zinterpretować - chodzi mi o to, że byłoby ponad i poza, nie standardowe)Odpowiedzi:
Aby wyodrębnić archiwum do katalogu innego niż bieżący, użyj opcji
-C
lub lub--directory
tar, jak wPamiętaj, że katalog docelowy musi istnieć przed uruchomieniem tej komendy (może być utworzony przez
mkdir /target/directory
).Przeczytaj stronę podręcznika (polecenie:),
man tar
aby poznać inne opcje.źródło
-v
flagę ( tryb pełny ), która wyświetla nazwę każdego pliku podczas jego wyodrębniania.--strip-components=1
na drugą odpowiedź.tar
się zgromadziły, nadal nie ma możliwości utworzenia katalogu wyjściowego, jeśli nie istnieje ?Zauważ, że jeśli twój plik tar zawiera już nazwę katalogu, który chcesz zmienić, dodaj
--strip-components=1
opcję:źródło
--strip-components
jest bardzo przydatny podczas uruchamiania dostawców, którzy mogą używać różnych wersji. W ten sposób/target/directory
może być ogólna nazwa bez martwienia się o to, jak dostawca zdecydował się nazwać folder archiwum.Łącząc poprzednie odpowiedzi i komentarze:
Aby po prostu wypakować zawartość i utworzyć katalog docelowy, jeśli go brakuje:
Aby wyodrębnić, a także usunąć katalog główny (pierwszego poziomu) z zip
źródło
Inną opcją jest użycie opcji - one-top-level. Spowoduje to automatyczne utworzenie katalogu na podstawie nazwy pliku oryginału.
Dodatkowo, jeśli chcesz, możesz określić własne, a tar utworzy je automatycznie.
źródło
--one-top-level
Interesujące w odniesieniu do ekstrakcji jest to, że zależy to od sposobu utworzenia archiwum, zobacz ten przykład
kiedy to zrobisz,
tar -zcvf folder.tar.gz folder
wszystko jest zgodne z oczekiwaniami = kiedy je teraz rozpakowujesz, to zostanie rozpakowane (folder zostanie utworzony, jeśli go usuniesz) jako/tmp/folder/
.Ale kiedy utworzysz tar as
tar -zcvf tmp-folder.tar.gz /tmp/folder
i rozpakujesz go w folderze / tmp, wynikiem będzie/tmp/tmp/folder
katalog! W takim przypadku musisz to zrobić, aby / -tar -xf tmp-folder.tar.gz -C /
źródło
W wersji tar 1.29 możemy po prostu dodać nazwę katalogu po nazwie pliku tar. Na przykład,
źródło