Estrattori universali


19

Con un numero crescente di formati di file di archivio / compressione, esiste un unico strumento da riga di comando gratuito / open-source per dominarli tutti? Forse qualcosa con un insieme coerente / unificato di bandiere? (nota il mio amichevole riferimento implicito a tar )

Una volta mi sono imbattuto in una serie di alias destinati a semplificare in gran parte il compito di comprimere / decomprimere i file con collegamenti a tare altri programmi di utilità, ma non riesco più a trovarlo.

Aggiornamento: come posso configurare qualcosa come atoolnon usare unzipper estrarre i file zip (che apparentemente non possono gestire file più grandi di 4 GB) e usare gunzipinvece?

$ 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

1
ancora un'altra soluzione: pacchetti.qa.debian.org/u/unp.html
frostschutz

@frostschutz. Sai se c'è qualcosa che potrebbe unpackdifferire da atool?
Amelio Vazquez-Reina,

Boh. Come mostra la risposta di Evan, un tale programma è abbastanza banale. Usa tutto ciò che funziona per te. Per decomprimere i file zip, la mia preferenza personale è 7z.
frostschutz,

1
@ user815423426 Ho aggiunto le istruzioni per la tua domanda aggiornata alla mia risposta esistente.
SuperMagic,

Risposte:


18

Uso atool . Fa il lavoro. Funziona con molti formati, sebbene non con tutti:

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

Questi strumenti di compressione sono ancora necessari, anche se atool è semplicemente un front-end per loro.

Mi piace in particolare il alscomando che fornisce che elenca i contenuti di qualsiasi formato di archivio supportato.

Il atoolcomando principale utilizza i propri flag per l'estrazione degli archivi (passando i flag appropriati agli strumenti di estrazione specifici sottostanti).

Oh, ed è nei repository di alcune distribuzioni (Fedora nel mio caso, anche se come ricordo, quando ho usato Ubuntu non era nei loro repository allora. E ho installato da un tarball.).

Aggiornamento sui repository : atool si trova nei seguenti repository delle distribuzioni (solo versioni correnti verificate):

  • Fedora
  • Debian (grazie @terdon e, presumibilmente, sono derivati ​​come Ubuntu)
  • Ubuntu (qed e, presumibilmente, derivati ​​come Mint)
  • Apri Suse
  • CentOS (e, presumibilmente, RHEL)
  • Arch Linux

Sono sicuro che ce ne sono altri ... plausibilmente, la maggior parte delle distribuzioni moderne.

Risposta per la domanda aggiornata "Come posso configurare qualcosa come atool per non usare unzip per estrarre i file zip ... e usare invece gunzip" :

Modifica il file di configurazione di atool ~/.atoolrce aggiungi la riga:

path_unzip /usr/bin/gunzip

con il percorso corretto per il tuo programma gunzip.

Vedi la pagina man per l'elenco completo delle possibili variabili che puoi inserire in questo file di configurazione, di cui ce ne sono molte . Se le opzioni della riga di comando necessarie per gunzip sono diverse da decomprimere, potrebbe essere necessario modificare la sorgente di atool (perl) stessa.


Grazie. Questo sembra fantastico. Sai se, oltre a poter scaricare il tarball, esiste un repository (git / bzr) per esso, o forse per un fork di esso?
Amelio Vazquez-Reina,

Non sembra esserci un repository git per questo. Esiste un repository cvs: brivido: savannah.nongnu.org/cvs/?group=atool . Tuttavia, la fonte è nel tarball e lo strumento è scritto in perl, così facilmente modificabile da te o da chiunque senta il bisogno.
SuperMagic,

1
@ user815423426 è anche nei repository Debian.
terdon

9

Ecco una piccola funzione shell che si occupa di diversi tipi di archivio.

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
}

Ho trovato la versione originale di questa funzione da qualche parte online e l'ho modificata un po 'per estrarre ararchivi e tararchivi compressi xz .


Questo sembra fantastico. Questo è per bash?
Amelio Vazquez-Reina,

L'ho provato solo con bashe zsh, ma dovrebbe funzionare anche con sh.

Questo è esteticamente piacevole per una funzione shell. Un avvertimento sarebbe che si desidera assicurarsi di aver installato tutti i file binari pertinenti o rimuovere le linee per quelli che non sono stati installati.
bgvaughan,

3

L' AVFS filesystem presenta una vista del filesystem in cui ogni file di archivio (ad es. /path/to/foo.zip) È accessibile come directory ( ~/.avfs/path/to/foo/zip#per questo esempio). AVFS fornisce l'accesso in sola lettura ai formati di file di archivio più comuni.

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

Avfs utilizza helper esterni che possono essere facilmente configurati modificando i file in /usr(sfortunatamente non è possibile utilizzare avfs 1.0 per utilizzare i file nella /usr/localo nella directory home, è necessario modificare /usro ricompilare i file ). /usr/share/avfs/extfs/ext-uzipè lo script per gestire i .zipfile, cambiarlo se non si desidera utilizzare /usr/bin/unzip. Invece potresti essere in grado di cavartela usando 7z: prova a modificare /usr/share/avfs/extfs/extfs.inie cambiare la linea ext-uzipin u7z .zip.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.