21

Некоторое время назад я ошибочно удалил свою домашнюю папку, потому что я запустил rm -rf * на неправильном терминале, рабочий каталог которого был домашней папкой!

Я хотел бы иметь псевдоним для команды rm , но это был не тот случай.

Теперь я планирую сделать скрипт как псевдоним для rm .

Есть ли у вас лучшие рекомендации, чтобы предложить?

Благодарю.

8 ответов8

29

Если вам нужен настроенный rm , не называйте его rm а просто своим именем, myrm , delete или чем-то еще.

Псевдоним rm='rm -i' ужасен, потому что через некоторое время вы будете ожидать, что rm предложит вам запрос по умолчанию перед удалением файлов. Конечно, однажды вы запустите его с учетной записью, у которой не установлен этот псевдоним, и, прежде чем вы поймете, что происходит, уже слишком поздно.

В любом случае, хороший способ быть готовым к потере или повреждению файла - делать резервные копии.

Быстрая альтернатива, которая защитит вас от случайного удаления или перезаписи файла, - это использование файловой системы, поддерживающей неограниченное количество снимков, таких как ZFS. Если частые снимки делаются автоматически, вы можете восстановить файлы в том состоянии, в котором они находились во время последнего снимка перед инцидентом.  

12

Если вы хотите сохранить псевдонимы, но не хотите рисковать привыканием к командам, работающим в вашей системе иначе, чем в других, вы можете отключить rm следующим образом

alias rm='echo "rm is disabled, use remove or trash or /bin/rm instead."'

Затем вы можете создать свой собственный безопасный псевдоним, например,

alias remove='/bin/rm -irv'

или используйте вместо этого trash .

5

Вы можете попробовать использовать trash вместо этого. Просто не забудьте опустошать его время от времени ...

3

Без необходимости изменения профиля anyones вы можете поместить в каталог файл с именем -i.

# touch -- -i
# ll
total 0
-rw-r--r-- 1 root users  0 Jan 26 19:24 files
drwxr-xr-x 2 root users 40 Jan 26 19:24 folder_of_power
-rw-r--r-- 1 root root   0 Jan 26 19:25 -i
-rw-r--r-- 1 root users  0 Jan 26 19:24 important
-rw-r--r-- 1 root users  0 Jan 26 19:24 very
# rm -rf *
rm: remove regular empty file `files'? 
1

Я использую следующий скрипт.

#!/bin/sh

trash=$HOME/tmp
mv "$@" $trash
nohup find "$trash" -type f -atime +7 -exec /bin/rm '{}' \; 2>&1 &

Если вы случайно удалили файл, восстановите его из $HOME/tmp .

Сценарий перемещает удаленные файлы в каталог tmp и удаляет их при следующем запуске сценария удаления, если время доступа составляет 7 дней (полуавтоматическая очистка каталога $HOME/tmp ).

-2

Скрипт с именем d , с содержимым mv $* /tmp .

редактировать: это плохая идея; увидеть ниже. В настоящее время у меня в alias d='mv -t /tmp' есть .profile .

-2

Этот код bash добавляет функцию rm в файл конфигурации ~/.bash_profile . После запуска этого, если вы напишите rm file , вы переместите этот файл в /tmp

cat << EOF >> ~/.bash_profile
rm () {
  mv $1 /tmp
}
EOF
-2

В вашем профиле

alias rm="rm -i"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .