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


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Kirill Frolov                        2:5030/827.2   31 May 2003  03:03:02
 To : Andrew Dolgov
 Subject : rm -rf *
 -------------------------------------------------------------------------------- 
 
 
 KF>> никакого звукового оформления.
 AD> верно мыслишь. даешь звуковое оформление к rm!
 AD> # rm -rf /
 AD> (голос из колонок) во$#я!
 
 Newsgroups: fido7.spb.linux
 From: Kirill Frolov
 Subject: rm -rf * :-(
 Date: Fri, 30 May 2003 22:13:59 +0000 (UTC)
 
    Применил патч имени бармина, случайно :-(
 С ext3fs восстановить что-либо не удаётся :~-(
 
    Чтобы избежать подобных неприятностей в будущем рекомендую:
 
    0). Пользоваться "синенькими панельками"...
 
    1). alias rm=trash  в ~/.profile или ~/.bash_profile.
    
    2). нижеприведённый скрипт в ~/bin/trash или ещё куда.
      Скрипт понимает все опции /bin/rm кроме -d.
      Скрипт должен работать с bash и BSDовым [a]sh,
      возможно с zsh, насчёт остальных шеллов не уверен.
      
    3). mkdir ~/.trash
    
    4). export TRASHMAXSIZE=10000000 в ~/.bash_profile 
      задаёт максимальный размер файла или каталога
      со всеми вложенными файлами, который будет
      перемещён в ~/.trash (или в каталог указанный
      в переменной TRASHDIR) вместо удаления. Файлы
      или каталоги большего размера будут сразу удалены,
      но перед этим будет всегда запрошено подтверждение.
      
    5). следующие команды следует поместить в crontab
     для вычищения ~/.trash время от времени:
 
 TRASHDIR=${TRASHDIR:="HOME/.trash"}
 find /home/sysop/.trash/ -type f -size +1000k -ctime +1 -print0 | xargs -0 rm
 2>/dev/null
 find /home/sysop/.trash/ -ctime +7 -print0 | xargs -0 rm 2>/dev/null 
    
    6). Редактор (Vim или Emacs) можно настроить для помещения бэкапов в помойку
    Для Vim: set backup и set backupdir=~/.trash,.,/tmp,~/
 
    7). Пользователи Debian могут установить и настроить более функциональный
    libtrash и не заморачиваться с моим скриптом.
    
    
 
 #!/bin/sh
 # send bug reports report to: <Kirill.Frolov@p2.f827.n5030.z2.fidonet.org>
 # version 0.1
 
 TRASHDIR=${TRASHDIR:="$HOME/.trash"}
 TRASHMAXSIZE=${TRASHMAXSIZE:=0}
 opt_i=0; opt_r=0; opt_f=0; opt_v=0
 
 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) 
    echo "Usage: trash [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                output version information and exit"
    echo
    echo "See man page trash(1) for more information."
    exit 0
    ;;
   --version) 
    echo "trash version 0.0"
    exit 0
    ;;
   --interactive)   opt_i=1; opt_f=0;;
   -r|-R|--recursive)   opt_r=1;;
   --force)     opt_f=1; opt_i=0;;
   --verbose)   opt_v=1;;
   --trash)
    arg=TRASHDIR
    ;;
   -*)
    while { next=${next#?}; [ -n "$next" ]; };
    do case ${next} in
       i*) opt_i=1; opt_f=0;;
       r*|R*) opt_r=1;;
       f*) opt_f=1; opt_i=0;;
       v*) opt_v=1;;
       t*) case $next in t) arg=TRASHDIR;;
           *) TRASHDIR=${next#?}
        ;; esac
        next="-t"
        break
        ;;
       *)
        while $((${#next}>1)); do next=${next%?}; done
        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 "$@"
 
 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
 
 [ -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
   case $a in y|Y);; *) continue;; esac
 ;; esac
 
 if [ "$TRASHMAXSIZE" -eq 0 -o $(du -s "$next" | cut -f 1) -lt "$TRASHMAXSIZE" ];
 then
   eval mv $mvopts -- \'$next\' \'$TRASHDIR\'
 else
   echo "trash: \`$next' cannot be moved to trash can"
   echo "trash: REMOVE file or directory \`$next'?"
   read a
   case $a in y|Y);; *) continue;; esac
   eval rm $rmopts -- \'$next\' || true
 fi
 
 done
 -- 
 [ZX]
 --- ifmail v.2.14-tx8.10
  * Origin: A quick brown fox jumps over the lazy dog. (2:5030/827.2)
 
 

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

 Тема:    Автор:    Дата:  
 rm -rf *   Kirill Frolov   31 May 2003 03:03:02 
Архивное /ru.linux/38331c1db305.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional