Ekstraktor universal

19

Dengan semakin banyak format file arsip / kompresi, apakah ada alat baris perintah gratis / sumber terbuka untuk mengatur semuanya? Mungkin sesuatu dengan set bendera yang konsisten / terpadu? (perhatikan referensi implisit ramah saya untuk tar )

Saya pernah mengalami serangkaian alias yang dimaksudkan untuk menyederhanakan tugas mengompresi / menghapus kompresi file dengan binding ke tardan utilitas lain, tetapi saya tidak dapat menemukan ini lagi.

Pembaruan: Bagaimana saya bisa mengonfigurasi sesuatu yang atooltidak digunakan unzipuntuk mengekstrak file zip (yang tampaknya tidak dapat menangani file yang lebih besar dari 4GB) dan gunzipsebagai gantinya digunakan ?

$ 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
sumber
1
lagi solusi: packages.qa.debian.org/u/unp.html
frostschutz
@frostschutz. Apakah Anda tahu jika ada sesuatu yang dapat membuat unpackperbedaan atool?
Amelio Vazquez-Reina
Tidak tahu Seperti yang ditunjukkan jawaban Evan, program semacam itu cukup sepele. Gunakan apa pun yang bekerja untuk Anda. Untuk membongkar file zip, preferensi pribadi saya adalah7z .
frostschutz
1
@ user815423426 Saya telah menambahkan instruksi untuk pertanyaan Anda yang diperbarui ke jawaban yang ada
SuperMagic

Jawaban:

18

Saya menggunakan atool . Itu berhasil. Ini berfungsi dengan banyak, meskipun tidak semua format:

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

Alat kompresi ini masih diperlukan, meskipun karena atool hanyalah ujung depan untuk mereka.

Saya terutama menyukai alsperintah yang disediakannya yang berisi daftar isi format arsip apa pun yang didukung.

atoolPerintah utama menggunakan flagnya sendiri untuk mengekstraksi arsip (meneruskan flag yang sesuai ke alat ekstraksi yang mendasarinya).

Oh, dan itu ada di beberapa repositori distribusi (Fedora dalam kasus saya, meskipun seingat saya, ketika saya menggunakan Ubuntu, itu tidak ada dalam repo mereka, dan saya menginstal dari tarball.).

Pembaruan pada Repositori : atool ada dalam repositori distribusi berikut (hanya rilis terkini yang diperiksa):

  • Fedora
  • Debian (terima kasih @terdon, dan, mungkin, ini turunannya seperti Ubuntu)
  • Ubuntu (qed, dan, mungkin, turunannya seperti Mint)
  • Buka Suse
  • CentOS (dan, mungkin, RHEL)
  • Arch Linux

Saya yakin ada yang lain ... masuk akal, sebagian besar distribusi modern.

Jawaban untuk Pertanyaan yang Diperbarui "Bagaimana saya bisa mengkonfigurasi sesuatu seperti atool untuk tidak menggunakan unzip untuk mengekstrak file zip ... dan menggunakan gunzip sebagai gantinya" :

Edit file konfigurasi atool ~/.atoolrcdan tambahkan baris:

path_unzip /usr/bin/gunzip

dengan jalur yang benar ke program gunzip Anda.

Lihat halaman manual untuk daftar lengkap dari variabel-variabel yang mungkin Anda dapat letakkan di file konfigurasi ini, yang jumlahnya banyak . Jika opsi baris perintah yang diperlukan untuk gunzip berbeda dari unzip, Anda mungkin harus memodifikasi sumber atool (perl) itu sendiri.

SuperMagic
sumber
Terima kasih. Ini terlihat hebat. Apakah Anda tahu jika, selain bisa mengunduh tarball, ada repositori (git / bzr) untuknya, atau mungkin untuk garpu itu?
Amelio Vazquez-Reina
Tampaknya tidak ada repo git untuk itu. Ada, gemetar, cvs repo: savannah.nongnu.org/cvs/?group=atool . Namun, sumbernya ada di tarball dan alat ini ditulis dalam perl, sehingga mudah dimodifikasi oleh Anda atau siapa pun yang merasakan keinginan tersebut.
SuperMagic
1
@ user815423426 itu juga di repo Debian.
terdon
9

Inilah fungsi shell kecil yang menangani beberapa jenis arsip.

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
}

Saya menemukan versi asli dari fungsi ini di suatu tempat online dan memodifikasinya sedikit untuk mengekstrak ararsip dan tararsip terkompresi xz .

starbeamrainbowlabs
sumber
Ini terlihat hebat. Apakah ini untuk bash?
Amelio Vazquez-Reina
Saya hanya menguji ini dengan bashdan zsh, tetapi harus bekerja dengan shbaik.
Ini luar biasa menyenangkan untuk fungsi shell. Satu peringatan adalah Anda ingin memastikan bahwa Anda telah menginstal semua binari yang relevan, atau menghapus baris untuk yang belum Anda instal.
bgvaughan
3

Sistem file AVFS menyajikan tampilan sistem file tempat setiap file arsip (mis. /path/to/foo.zip) Dapat diakses sebagai direktori ( ~/.avfs/path/to/foo/zip#untuk contoh ini). AVFS menyediakan akses hanya baca ke sebagian besar format file arsip.

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

Avfs menggunakan bantuan eksternal yang dapat dengan mudah dikonfigurasikan dengan mengedit file di /usr(sayangnya tidak ada cara avfs 1.0 untuk menggunakan file di /usr/localatau di direktori home Anda, Anda perlu mengedit file di dalam /usratau mengkompilasi ulang). /usr/share/avfs/extfs/ext-uzipadalah skrip untuk menangani .zipfile, ubah jika Anda tidak ingin menggunakannya /usr/bin/unzip. Anda mungkin bisa menggunakan 7z sebagai gantinya: coba edit /usr/share/avfs/extfs/extfs.inidan ubah baris ext-uzipke u7z .zip.

Gilles 'SANGAT berhenti menjadi jahat'
sumber