ZXNet эхоконференция «zxnet.pc»


тема: rm -rf * :-(



от: Kirill Frolov
кому: All
дата: 31 May 2003
Применил патч имени бармина, случайно :-(
С 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:
# 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 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]




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Ликбез - Маленький словарик пользователя сети.
Soft Group - Интересный текст от Ивана Рощина для кодеров.
Этюды - В.Сироткин. Программа подсчета контрольной суммы.
Реклама - Реклама и объявления...
News - Из армии вернулся Dissonator/i8

В этот день...   23 апреля