> # Распаковка любого архива (http://muhas.ru/?p=55) > unpack() > { > if [ $# -lt 1 ]; then > echo "Usage: unpack <file> [args]" >&2 > return 1 > fi > > a_name="$1" > extract_dir="$( echo $(basename "$a_name") | sed "s/\.${1##*.}//g" )" > > shift > > if [ -f $1 ] ; then > case $1 in > *.tar.bz2,*.tbz,*.tbz2) tar xvjf "$a_name" $* ;; > *.tar.gz,*.tgz) tar xvzf "$a_name" $* ;; > *.tar.xz) tar --xz -xvf "$a_name" $* ;; > *.tar.zma,*.tlz) tar --lzma -xvf "$a_name" $* ;; > *.bz2) bunzip2 "$a_name" $* ;; > *.rar) unrar x "$a_name" $* ;; > *.gz) gunzip "$a_name" $* ;; > *.tar) tar xvf "$a_name" $* ;; > *.zip) unzip "$a_name" $* ;; > *.Z) uncompress "$a_name" $* ;; > *.7z) 7za x "$a_name" $* ;; > *.rar) unrar x "$a_name" $* ;; > *.xz) unxz "$a_name" $* ;; > *.arj) arj x "$a_name" $* ;; > *.ace) unace x "$a_name" $* ;; > *.lzm,*.lzma) unlzma "$a_name" $* ;; > *.deb) > mkdir -p "$extract_dir/control" > mkdir -p "$extract_dir/data" > cd "$extract_dir"; ar vx "../${1}" > /dev/null > cd control; tar xzvf ../control.tar.gz > cd ../data; tar xzvf ../data.tar.gz > cd ..; rm *.tar.gz debian-binary > cd .. > ;; > *.ar) ar x "$a_name" $* ;; > *.cpio,*.rpm) cpio -i $* < "$a_name" ;; > *) echo "Cannot unpack '$a_name' $*..." ;; > esac > else > echo "'$1' is not a valid file" > fi > } > > # ... и упаковка (http://muhas.ru/?p=55) > pack() > { > if [ $1 ] ; then > case $1 in > tbz) tar cjvf $2.tar.bz2 $2 ;; > tgz) tar czvf $2.tar.gz $2 ;; > tar) tar cpvf $2.tar $2 ;; > bz2) bzip $2 ;; > gz) gzip -c -9 --best -n $2 > $2.gz ;; > zip) zip -r $2.zip $2 ;; > 7z) 7z a $2.7z $2 ;; > rar) rar a $2.rar $2 ;; > *) echo "'$1' Cannot be packed via pack()" ;; > esac > else > echo "'$1' is not a valid file" > fi > } Видел эти функции, не знаю где они изначально появились, когда ковырялся в арче спер конфиг у какого-то хакера арче, вроде бы codemac, но точно не помню, были и куски кода phrakture (Aaron Griffin). Функции крутые, но в свое время отказался от них, чтобы не забывать команд, не везде есть свой .bashrc/.zshrc под рукой, и потому по памяти можно набирать unpack/pack, но вывод будет: -- -bash: unpack: command not found -- Кстати pack функция изначально называлась _roll_, только что глянул свой .bashrc, там так и осталась она. А вот то, что у меня в .zsh/functions лежит еще: (кстати синтаксис рабочий только в zsh) -- unpack() { local old_dirs current_dirs lower lower=${(L)1} old_dirs=( *(N/) ) if [[ $lower == *.tar.gz || $lower == *.tgz ]]; then tar xvzf $1 elif [[ $lower == *.gz ]]; then gunzip $1 elif [[ $lower == *.tar.bz2 || $lower == *.tbz ]]; then tar xvjf $1 elif [[ $lower == *.bz2 ]]; then bunzip2 $1 elif [[ $lower == *.zip ]]; then unzip $1 elif [[ $lower == *.rar ]]; then unrar e $1 elif [[ $lower == *.tar ]]; then tar xvf $1 elif [[ $lower == *.lha ]]; then lha e $1 else print "Unknown archive type: $1" return 1 fi # Change in to the newly created directory, and # list the directory contents, if there is one. current_dirs=( *(N/) ) for i in {1..${#current_dirs}}; do if [[ $current_dirs[$i] != $old_dirs[$i] ]]; then cd $current_dirs[$i] break fi done } это и для баша и для zsh идентично roll() { FILE=$1 case $FILE in *.tar.bz2) shift && tar cjf $FILE $* ;; *.tar.gz) shift && tar czf $FILE $* ;; *.tgz) shift && tar czf $FILE $* ;; *.zip) shift && zip $FILE $* ;; *.rar) shift && rar $FILE $* ;; esac } -- -Ivan
Attachment:
signature.asc
Description: Digital signature