> # Распаковка любого архива (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
signature.asc
Description: Digital signature

