Utwórz katalog docelowy podczas rozpakowywania tarballa

25

Czy można utworzyć katalog docelowy podobny do tego mkdir -p, w którym mogę zdefiniować nieistniejący katalog docelowy w ramach mojej komendy tar, a tar utworzy dla mnie katalog?

Wiem, że mogę przekierować dane wyjściowe do katalogu przy użyciu tar -C /target/dir, ale to nie działa, jeśli katalog docelowy nie istnieje.

wulfgarpro
źródło
4
Jeśli nie jest to możliwe, zawsze możesz utworzyć alias powłoki.
n0pe

Odpowiedzi:

38
mkdir -p /target/dir && tar -C /target/dir
V jak V
źródło
3
Bez karmienia łyżką, prosto i na temat.
Amado Martinez
10
Niewielka sugerowana zmiana:mkdir -p /target/dir && tar -C $_
Mark Melville
@MarkMelville opisuje nam, co $ _ ma tu de
Suhayb
@ Suhayb $_to specjalny parametr w Bash, który rozwija się do ostatniego argumentu do poprzedniego polecenia.
ConceptRat
13
tar -xvf bash.html_node.tar.gz --one-top-level

Ze strony man komendy tar

--one-top-level[=DIR]

    Wyodrębnij wszystkie pliki do DIR lub, jeśli są używane bez argumentów, do podkatalogu o nazwie podstawowej nazwy archiwum (pomniejszone o standardowe sufiksy kompresji rozpoznawalne przez --auto-compress).

----- test

test 1

tar zxvf ../aaa.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree aaa
aaa/
├── 111
└── 222

// jeśli nazwa tgz jest taka sama jak katalog_archiwum archiwum, żaden inny efekt

test 2

mv ../aaa.tgz ../bbb.tgz

tar zxvf ../bbb.tgz --one-top-level
aaa/
aaa/222
aaa/111

tree bbb
bbb
└── aaa
    ├── 111
    └── 222

// jeśli nazwa tgz nie jest taka sama jak katalog_archiwum archiwum, utwórz katalog najwyższego poziomu

Alaa Ahmad M. Zakaria
źródło
3
Wymaga tar GNU? Domyślna tar bsd dla systemu Mac nie ma tej opcji.
Curtis Yallop
1
Tak, należy to wyraźniej wymienić.
kcrisman
5

To miało dla mnie więcej sensu: mkdir -p /create/folder && tar -zxf haroopad-v0.13.0_x64.tar.gz -C /create/testfolder

mkdirtworzy folder, chociaż nie do końca rozumiem -pprzełącznik. &&pozwala wykonać drugie polecenie. Użyłem typowych przełączników tar, ale na końcu -Csłuży do zmiany katalogów i wyodrębnienia do potrzebnej lokalizacji.

referencja: rozpakuj-pliki-zawarte-w-archiwum-tar-gz-do-nowego-katalogu-o nazwie-archiwum

Gr4cchus
źródło
2
Przełącznik -p nie zgłosi błędu, jeśli katalog już istnieje.
David
@David utworzy również wszystkie wiodące nieistniejące katalogi, tzn. Utworzy, /createjeśli nie będzie.
Antonio Pérez
1

Jeśli nie znasz ścieżek do utworzenia ...
Pobierz potrzebne ścieżki z pliku tar, a następnie utwórz je ...

for P in \`tar tvf tarfile.tar |tr -s [:space:] |cut -d' ' -f6\`; do  
    C=\`echo "${P: -1}"\`  #get the last character  
    if [ $C = '/' ]; then  
        echo "Found directory: $P"  
        mkdir -p $P  
    fi  
done
ckroger
źródło