2010-04-20

Функции в bash. Архивируй это!

Несмотря на два с половиной года использования Linux (вплотную с Ubuntu 7.10), как-то не вникал в тонкости shell-программирования. Ну цикл организовать, условия, выборки - пригождалось, но не белее того. Написал себе пару десятков alias-ов, для удобства, но чтобы обрабатывать опции командной строки писал отдельные скрипты на bash или python и складывал их в ~/bin, добавив путь к этой папке к переменной PATH.
Сравнительно недавно попалась на глаза информация о функциях в bash, и оказалось - это то, что мне нужно, чтобы не плодить скрипты. Они, оказывается, способны обрабатывать опции. В связи с этим, чтобы удобнее было создавать zip-архивы из чего угодно и поменьше тыкать по клавишам, накидал вот такую функцию, и поместил ее в ~/.bashrc

function zipp(){
    if [ -d "$1" ]; then out=`basename "$1"`".zip"; fi
    if [ -f "$1" ]; then out=`echo $1 | sed 's/\(.*\)\..*$/\1/g'`".zip"; fi
    zip -r -9 "$PWD/$out" "$1"
}

В ней проверяется, что сжимаем, каталог или файл, если файл - то отсекается расширение, если каталог - берется его имя без полного пути. После этого к имени добавляется ".zip", и передается архиватору как имя файла создаваемого архива.
Опции -r и -9 означают архивирование со всеми вложенными файлами с максимальной степенью сжатия.
Теперь, вместо того, чтобы писать в консоли
$ zip -9 -r myfolder.zip myfolder/

я пишу
$ zipp myfolder

Неправда ли, намного удобнее?

Комментариев нет: