Перехват вызовов в rm и направление удаленных файлов в корзину

Есть ли способ перехватывать вызовы в rm и вместо того, чтобы навсегда удалять файлы, вместо этого перемещая их в корзину?

10
задан 1 November 2011 в 05:18

2 ответа

Для этого на webupd8.org есть рецепт. Чтобы предотвратить гниение ссылок, вот важная информация (с несколькими дополнениями).

sudo apt-get install trash-cli

Это установит команды trash, empty-trash, list-trash и restore-trash, которые вы можете использовать как есть или сделать rm псевдонимом trash (см. Ниже). [ 1123]

Семантика команды 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.

И это должно быть так.

0
ответ дан 1 November 2011 в 05:18

libtrash (пакет libtrash в Ubuntu), кажется, делает это, но я никогда не использовал его.

0
ответ дан 1 November 2011 в 05:18

Другие вопросы по тегам:

Похожие вопросы: