Простая распаковка любых архивов

/ Просмотров: 1841

Очень простой скрипт позволяет в 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.

Скрипт у меня называется просто и изящно smile 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. Оба, разумеется, посолиднее вышеприведенного скрипта, у обоих список поддерживаемых форматов архивов побогаче, оба работают нормально, хотя тщательной проверки я им не устраивал. Но как бы это сказать... они скучнее, что ли. То ли дело повозиться со скриптом самому smile

Кстати:    если в man unp прочитаете "Run unp without arguments to see the list of supported archive formats." - не верьте. Таким макаром списка поддерживаемых форматов вы не получите, утилита просто отмолчится. Для того, чтобы всё-таки посмотреть на этот список, ее надо запустить с ключом -s.

...Что же это за мир, в котором даже манам верить нельзя!..

UPD:   Да, совсем забыл! Тысяча извинений перед питоньерами, – не могли же они, конечно, мириться с тем, что на перле есть такое, а на питоне нет. Есть, есть (в том числе в репах), patool называется. Тоже хорош, как говорится – не хуже чем у людей. Три десятка форматов умеет распаковать, включая .deb и .rpm. Правда, синтаксис у него какой-то коболовский, надо писать в командной строке patool extract <имя_архива> и никаких коротких опций. Но авторы, чувствуя такую, мягко говоря, несовременнось, прямо в мане советуют создать алиасы на все команды утилиты, и это разумный совет, а то пальцы нафиг отвалятся каждый раз набирать столько букв.
Оставьте комментарий

Комментарий будет опубликован после проверки

(обязательно)