Uniwersalne odkurzacze

19

Czy w związku z rosnącą liczbą formatów plików archiwów / kompresji istnieje jedno narzędzie wiersza polecenia wolne / otwarte, aby rządzić nimi wszystkimi? Być może coś ze spójnym / zunifikowanym zestawem flag? (zwróć uwagę na moje przyjazne ukryte odniesienie do tar )

Raz spotkałem się z zestawem aliasów, które mają znacznie uprościć zadanie kompresji / dekompresji plików z powiązaniami do tari innymi narzędziami, ale nie mogę tego już znaleźć.

Aktualizacja: Jak skonfigurować coś takiego, atoolaby nie używać unzipdo wyodrębniania plików zip (które najwyraźniej nie mogą obsługiwać plików większych niż 4 GB) i gunzipzamiast tego używać ?

$ aunpack large_file.zip
error:  Zip file too big (greater than 4294959102 bytes)
Archive:  large_file.zip
warning [large_file.zip]:  1491344848 extra bytes at beginning or within zipfile
  (attempting to process anyway)
error [large_file.zip]:  start of central directory not found;
  zipfile corrupt.
  (please check that you have transferred or created the zipfile in the
  appropriate BINARY mode and that you have compiled UnZip properly)
aunpack: unzip ...: non-zero return-code
Amelio Vazquez-Reina
źródło
1
jeszcze inne rozwiązanie: packages.qa.debian.org/u/unp.html
frostschutz
@frostschutz. Czy wiesz, czy jest coś, co może unpackodróżnić atool?
Amelio Vazquez-Reina,
Dunno. Jak pokazuje odpowiedź Evana, taki program jest dość trywialny. Używaj tego, co Ci odpowiada. Osobiście preferuję rozpakowywanie plików zip 7z.
frostschutz
1
@ user815423426 Do mojej istniejącej odpowiedzi dodałem instrukcje dotyczące zaktualizowanego pytania.
SuperMagic,

Odpowiedzi:

18

Używam atool . To działa. Działa z wieloma, choć nie wszystkimi formatami:

tar, gzip, bzip2, bzip, lzip, lzop, lzma, zip, rar, lha, arj, arc, p7zip itp.

Te narzędzia do kompresji są nadal potrzebne, ponieważ atool jest dla nich po prostu interfejsem użytkownika.

Szczególnie podoba mi się alspolecenie, które udostępnia zawartość dowolnego obsługiwanego formatu archiwum.

Polecenie główne atoolużywa własnych flag do rozpakowywania archiwów (przekazując odpowiednie flagi do określonych podstawowych narzędzi do rozpakowywania).

Aha, i jest w repozytoriach niektórych dystrybucji (w moim przypadku Fedora, chociaż o ile pamiętam, kiedy korzystałem z Ubuntu, nie było ich wtedy w repozytoriach i instalowałem z tarballa).

Aktualizacja w repozytoriach : atool znajduje się w repozytoriach następujących dystrybucji (sprawdzone tylko bieżące wersje):

  • Fedora
  • Debian (dzięki @terdon i przypuszczalnie jest to pochodne takie jak Ubuntu)
  • Ubuntu (qed i przypuszczalnie pochodne takie jak mennica)
  • Otwórz Suse
  • CentOS (i przypuszczalnie RHEL)
  • Arch Linux

Jestem pewien, że istnieją inne ... prawdopodobnie najbardziej nowoczesne dystrybucje.

Odpowiedź na zaktualizowane pytanie „Jak mogę skonfigurować coś takiego jak atool, aby nie rozpakowywać plików w celu rozpakowywania plików zip ... i zamiast tego używać gunzip” :

Edytuj plik konfiguracyjny atool ~/.atoolrci dodaj wiersz:

path_unzip /usr/bin/gunzip

z prawidłową ścieżką do programu gunzip.

Zobacz stronę man, aby uzyskać pełną listę możliwych zmiennych, które możesz umieścić w tym pliku konfiguracyjnym, których jest dużo . Jeśli opcje wiersza poleceń niezbędne dla gunzip są inne niż rozpakowanie, może być konieczne zmodyfikowanie samego źródła atool (perl).

SuperMagic
źródło
Dzięki. To wygląda świetnie. Czy wiesz, że oprócz możliwości ściągnięcia tarballa istnieje repozytorium (git / bzr), a może rozwidlenie?
Amelio Vazquez-Reina
Wydaje się, że nie ma dla niego repozytorium git. Istnieje repozytorium CVS, drżenie: savannah.nongnu.org/cvs/?group=atool . Jednak źródło znajduje się w archiwum, a narzędzie jest napisane w perlu, więc łatwo modyfikuje je ty lub ktokolwiek, kto odczuwa potrzebę.
SuperMagic
1
@ user815423426 jest również w repozytoriach Debiana.
terdon
9

Oto mała funkcja powłoki, która obsługuje kilka typów archiwów.

extract () {
    if [ ! -f "$1" ] ; then
        echo "'$1' does not exist."
        return 1
    fi

    case "$1" in
        *.tar.bz2)   tar xvjf "$1"   ;;
        *.tar.xz)    tar xvJf "$1"   ;;
        *.tar.gz)    tar xvzf "$1"   ;;
        *.bz2)       bunzip2 "$1"    ;;
        *.rar)       rar x "$1"      ;;
        *.gz)        gunzip "$1"     ;;
        *.tar)       tar xvf "$1"    ;;
        *.tbz2)      tar xvjf "$1"   ;;
        *.tgz)       tar xvzf "$1"   ;;
        *.zip)       unzip "$1"      ;;
        *.Z)         uncompress "$1" ;;
        *.xz)        xz -d "$1"      ;;
        *.7z)        7z x "$1"       ;;
        *.a)         ar x "$1"       ;;
        *)           echo "Unable to extract '$1'." ;;
    esac
}

Znalazłem oryginalną wersję tej funkcji gdzieś online i nieco ją zmodyfikowałem, aby wyodrębnić ararchiwa i tararchiwa skompresowane xz .

starbeamrainbowlabs
źródło
To wygląda świetnie. Czy to na bash?
Amelio Vazquez-Reina
Testowałem to tylko z bashi zsh, ale powinno to również działać sh.
Jest to wyjątkowo przyjemne pod względem estetycznym dla funkcji powłoki. Jednym zastrzeżeniem jest to, że chcesz upewnić się, że masz zainstalowane wszystkie odpowiednie pliki binarne lub usunąć wiersze dla tych, których nie zainstalowałeś.
bgvaughan
3

System plików AVFS przedstawia widok systemu plików, w którym każdy plik archiwum (np. /path/to/foo.zip) Jest dostępny jako katalog ( ~/.avfs/path/to/foo/zip#w tym przykładzie). AVFS zapewnia dostęp tylko do odczytu do najpopularniejszych formatów plików archiwów.

mountavfs
cp -Rp ~/.avfs$PWD/large_file.zip\# extraction_directory

Avfs korzysta z zewnętrznych pomocników, które można łatwo skonfigurować poprzez edycję plików w /usr(niestety od avfs 1.0 nie można używać plików w /usr/localkatalogu domowym ani w nim, należy edytować pliki /usrlub rekompilować). /usr/share/avfs/extfs/ext-uzipto skrypt do obsługi .zipplików, zmień go, jeśli nie chcesz go używać /usr/bin/unzip. Zamiast tego możesz uniknąć używania 7z: spróbuj edytować /usr/share/avfs/extfs/extfs.inii zmień wiersz ext-uzipna u7z .zip.

Gilles „SO- przestań być zły”
źródło