Существует ли единый бесплатный/открытый инструмент командной строки для извлечения всех форматов архивов/сжатия?

Существует ли единый бесплатный/открытый инструмент командной строки для извлечения всех форматов архивов/сжатия?

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

я используюинструмент. Он делает свою работу. Он работает со многими, хотя и не со всеми форматами:

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

Однако эти инструменты сжатия по-прежнему необходимы, поскольку atool — это всего лишь интерфейс для них.

Мне особенно нравится alsкоманда, которая выводит список содержимого любого поддерживаемого формата архива.

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

О, и он есть в репозиториях некоторых дистрибутивов (в моем случае Fedora, хотя, насколько я помню, когда я использовал Ubuntu, его не было в репозиториях, и я установил его из tarball).

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

  • Федора
  • Debian (спасибо @terdon, и, предположительно, его производным, таким как Ubuntu)
  • Ubuntu (и, предположительно, производные, такие как Mint)
  • Открыть Suse
  • CentOS (и, предположительно, RHEL)
  • Арч Линукс

Я уверен, что есть и другие... вероятно, большинство современных дистрибутивов.

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

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

path_unzip /usr/bin/gunzip

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

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

решение2

Вот небольшая функция оболочки, которая обрабатывает несколько типов архивов.

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.

решение3

TheАВФСфайловая система представляет собой вид файловой системы, где каждый архивный файл (например /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.

решение4

libarchiveэтоМногоформатная библиотека архивации и сжатиякоторый поддерживаетмножество форматов архивации и сжатия.

bsdtarи bsdcpioявляются интерфейсами командной строки для API-интерфейсов, tarподобных cpioAPI-интерфейсам.

Так что если вы уже знакомы с любой из этих утилит, вам придется изучить на один интерфейс командной строки меньше.

Чтобы распаковать ваш файл .iso, .zip, .cab, .7z, .tar.gz.xz.bz2..., просто:

bsdtar xf file.<ext>

Как если бы вы выполняли tar xf file.tarтрадиционную tarкоманду.

Связанный контент