Projekty szanowanych zwolnić archiwa tar, które zawierają pojedynczy katalog, na przykład zyrgus-3.18.tar.gz
zawiera zyrgus-3.18
folder, który z kolei zawiera src
, build
, dist
, itd.
Ale w niektórych projektach punkowych wszystko leży u podstaw: „(powoduje to całkowity bałagan podczas rozpakowywania. Ręczne tworzenie folderu za każdym razem jest uciążliwe i niepotrzebne przez większość czasu.
- Czy istnieje superszybki sposób stwierdzenia, czy plik .tar lub .tar.gz zawiera więcej niż jeden katalog w katalogu głównym? Nawet dla dużego archiwum.
- Lub jeszcze lepiej, czy istnieje narzędzie, które w takich przypadkach stworzyłoby katalog (nazwę archiwum bez rozszerzenia) i umieściłoby wszystko w środku?
But some punk projects put everything at the root :'-(
Niektóre projekty punkowe całkowicie niepotrzebnie umieszczają wszystko w folderze, biorąc pod uwagę, że umieszczają już wszystko w załączonym archiwum, więc kiedy pobierzesz i rozpakujesz go do własnego folderu, tak jak zrobiłby to każdy inteligentny użytkownik, skończysz z całą treść zakryła kolejną warstwę. ;-)Odpowiedzi:
patool obsługuje różnego rodzaju archiwa i tworzy podkatalog na wypadek, gdyby archiwum zawierało wiele plików, aby zapobiec zaśmiecaniu katalogu roboczego wyodrębnionymi plikami.
Wyodrębnij archiwum
Aby uzyskać listę obsługiwanych formatów, użyj
patool formats
.źródło
alien
konwertowałem go na deb dla Ubuntu.patool
powinien być w repozytoriach dla Debiana i Ubuntu, jeśli używasz aktualnej wersji.Możesz zrobić coś takiego
aby zobaczyć, jakie wpisy najwyższego poziomu mają tar; potokuj, aby
wc -l
sprawdzić, czy jest więcej niż jeden. Zauważ, że jest kilka przypadków, w których to się nie powiedzie, np. Jeśli tar zawiera ścieżki plików formularzasomedir/whatever
i również./somedir/whatever
(lub coś bardziej szalonego); powinno to jednak być rzadkie.Spowoduje to odczytanie całego pliku tar przed wypisaniem czegokolwiek, ponieważ
sort
powinno to być szybsze niż rozpakowywanie, ponieważ jest to tylko jeden odczyt sekwencyjny i może pomijać duże pliki.Jeśli robisz to interaktywnie, a plik może być duża, można zmienić
sort -u
douniq
i Control+ Cjeśli drukuje się więcej niż jedno.źródło
sort | uniq
można skrócić dosort -u
.uniq -c
możesz to zrobić:
... aby wyświetlić zawartość
tar
pliku.jeśli chcesz wiedzieć, ile to poziomów, możesz zrobić:
możesz jawnie zabronić eksplozji podczas ekstrakcji za pomocą:
źródło
To powinno zrobić, co chcesz. Jestem pewien, że ktoś może to poprawić. W tych przykładach zakładam, że archiwum tar skompresowane gzip jest najczęstsze.
Chcesz archiwum, w którym nie ma węzłów rodzeństwa w drzewie katalogów na poziomie katalogu głównego.
Każdy wpis na liście zawartości tar musi zaczynać się od tego samego wzorca. Ten wzorzec jest ścieżką katalogu podstawowego, którą muszą udostępniać wszystkie wpisy w archiwum. Jeśli jakieś dwa wpisy nie zaczynają się od tego samego wzorca, są rodzeństwem.
Pierwszy wiersz na liście zawartości tar podaje minimalny wzorzec, który należy sprawdzić. To jest BASEPATH.
Następnie do testu dla tarballs wybuchem trzeba sprawdzić, czy każdy wiersz listy zawartości smoły nie zacząć od BasePath.
Zmień to w funkcję powłoki:
Stąd możesz napisać bezpieczną funkcję ekstrakcji archiwum tar.
źródło
aunpack archive.tar
to jest to, czego używam.Część starego, dobrego pakietu atool . Manpage: https://linux.die.net/man/1/atool
źródło