Простая распаковка любых архивов
Очень простой скрипт позволяет в 3 – 4 нажатия на клавиши распаковывать (почти) любые архивы и при этом не лезть в маны и хэлпы за параметрами разных архиваторов.
Код, повторяюсь, чрезвычайно прост и легко расширяется, – в этом его преимущество перед готовыми консольными инструментами, о которых я скажу ниже. На гитхабе он обнаружился под авторством Виталия Терещука, с лицензией MIT и с датой 2013. Хотя еще в 2012 году тот же код был опубликован на Linuxguru. Возможно, конечно, тем же Виталием Терещуком.
Дальнейшие розыски истинного автора показались мне делом сущеглупым, – по той простой причине, что подобный код мог сочинить любой старшеклассник, увлекшийся изучением Advanced Bash-Scripting Guide.
В оригинале это оформлено как функция, которая вставляется в ~/.bashrc. Я, однако, не любитель тащить всё в конфигурационные файлы, у меня в ~/.bashrc и без того до фига всякого. Поэтому переписал функцию как bash-скрипт и поместил его в специальную директорию ~/bin, которая прописана в переменной $PATH и в которой у меня лежат всякие полезные скрипты, самописные или заимствованные. Кроме того, добавил распаковку архивов .lrz (об архиваторе lrzip на mintmem была заметка), позже еще и lzop и сделал простенькую подсветку вывода. Кроме того, в качестве развлечения и (возможно) помощи кому-то, добавил проверку, установлены ли архиваторы lzop и lrzip: если нет, скрипт будет предлагать вам их установить. Остальные архиваторы в Mint 17.2 идут "из коробки", а вот на других ОСях их присутствие придется проверять. Тут-то и могут кому-то пригодиться конструкции, которые я применил к lzop и lrzip.
Скрипт у меня называется просто и изящно unpack, на него в ~/.bash_aliases прописан алиас un:
alias un='unpack'
Код скрипта такой:
#!/bin/bash # Распаковка разных архивов (см. # http://linuxguru.ru/good-notes/raspakovka-vsex-tipov-arxivov-v-linux) # Другой источник: https://github.com/xvoland/Extract # (Author Vitalii Tereshchuk. © 2013, MIT license.) # Модифицировано brego, 2015, 2016 на LinuxMint 17.2 # Применение: unpack file # (или с алиасом un file) if [ "$1" ] ; then case "$1" in *.tar.bz2) tar -xjf "$1" ;; *.tar.gz) tar -xzf "$1" ;; *.tar.xz) tar -xJf "$1" ;; *.tar.lrz) if [[ ! "$( which lrzip )" ]];then echo " Установите lrzip: sudo apt-get install lrzip "; else lrzuntar "$1" fi ;; *.tar.lzo) if [[ ! "$( which lzop )" ]];then echo " Установите lzop: sudo apt-get install lzop "; else lzop -d < "$1" | tar -xvf - fi ;; *.bz2) bunzip2 "$1" ;; *.lzma) unlzma "$1" ;; *.rar) unrar x "$1" ;; *.gz) gunzip "$1" ;; *.tar) tar -xf "$1" ;; *.tbz2) tar -xjf "$1" ;; *.tgz) tar -xzf "$1" ;; *.ZIP|*.zip) unzip "$1" ;; *.Z) uncompress "$1" ;; *.7z) 7z x "$1" ;; *.xz) unxz "$1" ;; *.lrz) lrunzip "$1" ;; *.lzo) lzop -d "$1" ;; *.cab|*.exe) cabextract "$1" ;; *) tput setf 4 echo "Неизвестный тип архива" tput sgr0 ;; esac else tput rev echo "Применение: unpack имя_архива" tput sgr0 fi exit 0
В отличие от Виталия Терещука, я распространяю его под стандартной лицензией сайта mintmem.com БКН (что означает "Бери Кому Надо").
Обещанные два слова о других универсальных консольных распаковщиках.
При беглом галопе по Синаптику в репах легко обнаруживаются два инструмента: перловый скрипт unp и консольная версия МакОсовского Unarchiver – unar. Оба, разумеется, посолиднее вышеприведенного скрипта, у обоих список поддерживаемых форматов архивов побогаче, оба работают нормально, хотя тщательной проверки я им не устраивал. Но как бы это сказать... они скучнее, что ли. То ли дело повозиться со скриптом самому
...Что же это за мир, в котором даже манам верить нельзя!..
patool extract <имя_архива>
и никаких коротких опций. Но авторы, чувствуя такую, мягко говоря, несовременнось, прямо в мане советуют создать алиасы на все команды утилиты, и это разумный совет, а то пальцы нафиг отвалятся каждый раз набирать столько букв.