|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/38331c1db305.html, оценка из 5, голосов 10
|