Есть ли способ перехватывать вызовы в rm и вместо того, чтобы постоянно удалять файлы, вместо этого перемещая их в корзину?
Есть ли способ перехватывать вызовы в rm и вместо того, чтобы постоянно удалять файлы, вместо этого перемещая их в корзину?
Ответы:
Для этого на webupd8.org есть рецепт . Чтобы предотвратить гниение ссылок, вот важная информация (с некоторыми дополнениями).
sudo apt-get install trash-cli
Это установит trash
, empty-trash
, list-trash
и restore-trash
команды, которые вы можете использовать как есть или сделать rm
псевдоним trash
(см . Ниже)
Семантика trash
команды немного отличается от стандартной rm
- ей не требуется -r
флаг, чтобы можно было удалять каталоги. Если это вас беспокоит, webupd8.org предлагает следующий скрипт, который вы можете вставить в свой PATH и вызвать его trash-rm
:
#!/bin/bash
# command name: trash-rm
shopt -s extglob
recursive=1
declare -a cmd
((i = 0))
for f in "$@"; do
case "$f" in
(-*([fiIv])r*([fiIv])|-*([fiIv])R*([fiIv]))
tmp="${f//[rR]/}"
if [ -n "$tmp" ]; then
#echo "\$tmp == $tmp"
cmd[$i]="$tmp"
((i++))
fi
recursive=0
;;
(--recursive) recursive=0
;;
(*)
if [ $recursive != 0 -a -d "$f" ]; then
echo "skipping directory: $f"
continue
else
cmd[$i]="$f"
((i++))
fi
;;
esac
done
trash "${cmd[@]}"
В Ubuntu 12.04 и более поздних версиях последняя команда в сценарии должна быть trash-put "${cmd[@]}"
вместо trash "${cmd[@]}"
(поскольку команда изменилась с trash
на trash-put
).
Затем сделайте скрипт исполняемым:
chmod +x trash-rm
Как только вы поместите его в какой-нибудь каталог PATH
, добавьте псевдоним в ~ / .bashrc, что заставит bash вызвать ваш скрипт вместо фактической rm
команды:
alias rm="trash-rm"
Как правильно указывает djeikyb, трюк с псевдонимом .bashrc будет работать только для пользователя, чье имя .bashrc изменено, и только в сеансе терминала bash.
И это должно быть.
alias="trash"
). Знаете ли вы, в чем преимущество сценария?
trash
себя вести себя как rm
в отношении удаления каталогов. Это может быть важно для некоторых сценариев, которые, например, ожидают, что rm
будут работать так, как работают. Я обновил ответ.
libtrash (пакет libtrash в Ubuntu), кажется, делает это, но я никогда не использовал его.