Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Evgenii Terechkov                    2:5090/109.17  31 May 2003  06:52:57
 To : Kirill Frolov
 Subject : rm -rf *
 -------------------------------------------------------------------------------- 
 
 
 01 Июн 03 06:37, Kirill Frolov писал Alexandr S. Agranovsky:
 
  KF>    Кстати, попытка номер два (для alias rm="$HOME/bin/trash"):
 
         Ты дифф между "первой" и "второй" версией видел? Две строки чистыми. Hе
 работают элементарные вещи - типа интерактивность только по длинному флагу или
 рудиментарная переменная optend. Вот моя версия:
 
 === Begin file ===
 #!/bin/sh
 # send bug reports report to: <Kirill.Frolov@p2.f827.n5030.z2.fidonet.org>
 # version 0.1
 #patched to version 0.3 by Evgenii Terechkov: <2:5090/109.15>
 #FIXME: some options may be incompatible - use getopt(s)
 VERSION="0.3"
 TRASHDIR=${TRASHDIR:="$HOME/.trash"}
 TRASHMAXSIZE=${TRASHMAXSIZE:=0}
 opt_i=0; opt_r=0; opt_f=0; opt_v=0
 usage() {
     echo "Usage: `basename $0` [OPTIONS]... FILE..."
     echo "Move file(s) to trash can."
     echo
     echo "-f, --force              ignore nonexistent files, never prompt"
     echo "-i, --interactive        prompt before any removal"
     echo "-r, -R, --recursive      remove the content of directories
 recursively"
     echo "-v, --verbose            explain what is being done"
     echo "-t, --trash <directory>  specify trash can directory"
     echo "-h, --help               display this help and exit"
     echo "--version, -V            output version information and exit"
     echo
     echo "See man page trash(1) for more information."
 
 }
 
 opts() {
 unset arg
 args=:
 for next in "$@"; do
 case $arg in ?*) eval $arg=\'$next\'; unset arg; args="${args}-"; continue;;
 esac
 case $next in
     --)     break;
         ;;
     -h|--help|-help|--h|--he|--hel|-he|-hel)
         help=1;;
     --version|-V)
         echo "trash version $VERSION";;
     --interactive|-i)
         opt_i=1; opt_f=0;;
     -r|-R|--recursive)
         opt_r=1;;
     --force|-f)
         opt_f=1; opt_i=0;;
     --verbose|-v)
       opt_v=1;;
     --trash|-t)
         arg=TRASHDIR;;
     -*)
         while { next=${next#?}; [ -n "$next" ]; };
         do case ${next} in
           h*) help=1;;
             i*) opt_i=1; opt_f=0;;
             r*|R*) opt_r=1;;
             f*) opt_f=1; opt_i=0;;
             v*) opt_v=1;;
             V*) echo "trash version $VERSION";;
             t*)
                   case $next in
                       t) arg=TRASHDIR;;
                       *) TRASHDIR=${next#?};;
                   esac
                   next="-t"
                   break;;
               *)
                   #while $((${#next}>1)); do next=${next%?}; done #FIXME:it not
 working!
                   echo "trash: invalid option -- \`$next'"
                   echo "Try \`trash --help' for more information."
                   exit 1;;
           esac
         done;;
     *)
         args="${args}x"
         continue
 ;; esac
 args="${args}-"
 done
 case $arg in ?*)
     echo "trash: option requires an argument: $next"
     exit 1
 ;; esac
 }
 opts "$@"
 [ "$help" = "1" ] && usage
 unset rmopts mvopts
 case $opt_f in 1) rmopts="$rmopts -f";; esac
 case $opt_v in 1) rmopts="$rmopts -v"; mvopts="$mvopts -v";; esac
 
 set -e
 
 optend=no
 for next in "$@"; do
 args=${args#?}
 case $args in -*) continue;; esac
 
 [ "$next" = '--' -a "$optend" = "no" ] && {
     optend=yes
     continue
 }
 
 [ -e "$next" ] || {
     case $opt_f in 0)
         echo "trash: cannot remove \`$next': No such file or directory" >&2
     ;; esac
     continue
 }
 
 [ $opt_r = 0 -a -d "$next" ] && {
     case $opt_f in 0)
         echo "trash: \`$next' is a directory" >&2
     ;; esac
     continue
 }
 
 case $opt_i in 1)
     if [ -d "$next" ]; then echo "move directory \`$next' to trash can?"
         else echo "move file \`$next' to trash can?"
     fi
     read a #FIXME: how to read one char under any of
 sh/bash/ksh/zsh/tcsh/ash/... ?
     case $a in y|Y);; *) continue;; esac
 ;; esac
 
 if [ "$TRASHMAXSIZE" -eq 0 -o $(du -s -- "$next" | cut -f 1) -lt
 "$TRASHMAXSIZE" ]; then
     mkdir -p $TRASHDIR
     eval mv $mvopts -- \'$next\' \'$TRASHDIR\' || (echo "internal error, canot
 move:\`$next' to \`$TRASHDIR'" >&2)
 else
     echo "trash: \`$next' cannot be moved to trash can"
     echo "trash: REMOVE file or directory \`$next'? (DANGEROUS!!!)"
     read a
     case $a in y|Y);; *) continue;; esac
     eval rm $rmopts -- \'$next\' || (echo "internal error, not
 removed:\`$next'" >&2)
 fi
 
 done
 ===  End file  ===
 
         Сильно не пинать, я знаю что у меня здесь тоже много огрех. Hо не такая
 откровенная кривизна. Работает вроде. С ограничениями.
 
 Knock, knock,knock Kirill. Follow the white rabbit!
 CPlay playing: tb_genesis.ogg
 --- GoldED+/LNX 1.1.5-alt0.pre.20021026.8
  * Origin:  (2:5090/109.17)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: rm -rf *   Kirill Frolov   01 Jun 2003 07:37:42 
 Re: rm -rf *   Andrew Dolgov   02 Jun 2003 02:44:57 
 rm -rf *   Evgenii Terechkov   31 May 2003 06:52:57 
Архивное /ru.linux/39573ed7eef5.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional