Універсальні витяжки


19

Зі збільшенням кількості форматів файлів архіву / стиснення, чи існує єдиний інструмент командного рядка вільного / відкритого коду, щоб керувати ними всіма? Можливо, щось із послідовним / уніфікованим набором прапорів? (зверніть увагу на мою дружню неявну посилання на дьоготь )

Одного разу я натрапив на набір псевдонімів, який означав значною мірою спростити завдання стиснення / видалення компресії файлів із прив’язками до tarінших програм, але цього я вже не можу знайти.

Оновлення: Як я можу налаштувати щось на кшталт того, atoolщо не використовувати unzipдля вилучення zip-файлів (які, мабуть, не можуть обробляти файли розміром більше 4 Гб) та використовувати gunzipзамість них?

$ 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
ще одне рішення: packages.qa.debian.org/u/unp.html
frostschutz

@frostschutz. Чи знаєте ви, чи є щось, що може unpackвідрізнятись від atool?
Амеліо Васкес-Рейна

Данно. Як показує відповідь Евана, така програма є досить тривіальною. Використовуйте все, що працює для вас. Для розпакування поштових файлів мої особисті переваги 7z.
frostschutz

1
@ user815423426 Я додав інструкції щодо вашого оновленого питання до своєї існуючої відповіді.
SuperMagic

Відповіді:


18

Я використовую atool . Це робить свою роботу. Він працює у багатьох форматах, хоча не у всіх форматах:

tar, gzip, bzip2, bzip, lzip, lzop, lzma, zip, rar, lha, arj, arc, p7zip тощо.

Ці інструменти стиснення все ще потрібні, хоча як atool для них просто передній кінець.

Мені особливо подобається alsкоманда, яку вона надає, яка містить список вмісту будь-якого підтримуваного формату архіву.

Основна atoolкоманда використовує власні прапори для вилучення архівів (передача відповідних прапорів конкретним базовим інструментам вилучення).

О, і це в сховищах деяких дистрибутивів (Fedora в моєму випадку, хоча, як я пам’ятаю, тоді, коли я використовував Ubuntu, він тоді не був у їхніх репортажах. А я встановив з tarball.).

Оновлення в сховищах : atool знаходиться у сховищах таких дистрибутивів (лише поточні випуски перевірені):

  • Fedora
  • Debian (спасибі @terdon, і, мабуть, такі похідні, як Ubuntu)
  • Ubuntu (qed та, імовірно, похідні типу Mint)
  • Відкрити Suse
  • CentOS (і, імовірно, RHEL)
  • Arch Linux

Я впевнений, що є й інші ... правдоподібно, більшість сучасних дистрибуцій.

Відповідь на оновлене запитання "Як я можу налаштувати щось на зразок atool, щоб не використовувати розпакування для витягування zip-файлів ... та замість цього використовувати gunzip" :

Відредагуйте конфігураційний файл atool ~/.atoolrcта додайте рядок:

path_unzip /usr/bin/gunzip

з правильним шляхом до вашої програми gunzip.

Повний список можливих змінних див. У цьому конфігураційному файлі див. На сторінці чоловіка, яких дуже багато . Якщо параметри командного рядка, необхідні для gunzip, відрізняються від unzip, можливо, вам доведеться змінити сам джерело atool (perl).


Спасибі. Це виглядає чудово. Чи знаєте ви, якщо крім завантаження тарболу, для нього є сховище (git / bzr) або, можливо, для нього виделка?
Амеліо Васкес-Рейна

Здається, для цього не існує git repo. Є a, тремтіння, репортаж: savannah.nongnu.org/cvs/?group=atool . Однак, джерело знаходиться в тарболі, і інструмент написаний на перлі, тому легко змінюється вами або тим, хто відчуває потяг.
SuperMagic

1
@ user815423426 він також знаходиться в репості Debian.
terdon

9

Ось невелика функція оболонки, яка забезпечує декілька типів архіву.

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
}

Я знайшов оригінальну версію цієї функції десь в Інтернеті та трохи її змінив, щоб витягти arархіви та стислі tarархіви xz .


Це виглядає чудово. Це для баш?
Амеліо Васкес-Рейна

Я перевірив тільки це з bashі zsh, але він повинен працювати з , shа також.

Це винятково естетично для функції оболонки. Одним із застережень є те, що ви хочете переконатися, що у вас встановлені всі відповідні бінарні файли, або видалити рядки для тих, хто не встановлений.
bgvaughan

3

У АВФ файлова система являє собою вид файлової системи , де кожен архівний файл (наприклад /path/to/foo.zip) доступний як каталог ( ~/.avfs/path/to/foo/zip#для даного прикладу). AVFS забезпечує доступ лише для читання до найбільш поширених форматів архівів файлів.

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

Avfs використовує зовнішні помічники, які можна легко налаштувати шляхом редагування файлів у /usr(на жаль, у Avfs 1.0 немає можливості використовувати файли в /usr/localабо в домашньому каталозі, вам потрібно редагувати файли в /usrабо перекомпілювати). /usr/share/avfs/extfs/ext-uzipце сценарій для обробки .zipфайлів, змінити його, якщо ви не хочете використовувати /usr/bin/unzip. Можливо, ви зможете відмовитися від використання 7z замість цього: спробуйте редагувати /usr/share/avfs/extfs/extfs.iniта змінити рядок ext-uzipна u7z .zip.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.