Универсальные экстракторы

19

С увеличением числа форматов файлов архивов и сжатых данных существует ли единый бесплатный инструмент командной строки с открытым исходным кодом, чтобы управлять ими всеми? Возможно что-то с последовательным / унифицированным набором флагов? (обратите внимание на мою дружескую неявную ссылку на tar )

Однажды я столкнулся с набором псевдонимов, предназначенных для значительного упрощения задачи сжатия / распаковки файлов с привязками к 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?
Амелио Васкес-Рейна
Не знаю. Как показывает ответ Эвана, такая программа довольно тривиальна. Используйте то, что работает для вас. Для распаковки zip-файлов я предпочитаю 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, тогда их не было в их репозиториях. Я установил из тарбола).

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

  • мягкая фетровая шляпа
  • Debian (спасибо @terdon, и, предположительно, это производные от Ubuntu)
  • Ubuntu (Qed, и, по-видимому, производные, такие как Mint)
  • Открытый Suse
  • CentOS (и, по-видимому, RHEL)
  • Arch Linux

Я уверен, что есть и другие ... правдоподобно, самые современные дистрибутивы.

Ответ на обновленный вопрос «Как я могу настроить что-то вроде atool, чтобы не использовать unzip для распаковки zip-файлов ... и использовать вместо этого gunzip» :

Отредактируйте файл конфигурации atool ~/.atoolrcи добавьте строку:

path_unzip /usr/bin/gunzip

с правильным путем к вашей программе gunzip.

Смотрите man-страницу для полного списка возможных переменных, которые вы можете поместить в этот конфигурационный файл, которых много . Если параметры командной строки, необходимые для gunzip, отличаются от unzip, вам, возможно, придется изменить сам исходный код atool (perl).

супермагическим
источник
Благодарю. Это выглядит великолепно. Знаете ли вы, если помимо возможности загрузки архива есть репозиторий (git / bzr) для него или, может быть, для его разветвления?
Амелио Васкес-Рейна
Там, кажется, нет мерзавца репо для этого. Репозиторий cvs: savannah.nongnu.org/cvs/?group=atool . Тем не менее, исходный код находится в архиве, а инструмент написан на Perl, поэтому вы легко можете его изменить.
SuperMagic
1
@ user815423426 он также находится в репозиториях Debian.
Тердон
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 .

starbeamrainbowlabs
источник
Это выглядит великолепно. Это для Баш?
Амелио Васкес-Рейна
Я только протестировал это с 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.

Жиль "ТАК - прекрати быть злым"
источник