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

Все ядра хранятся, если вы явно не удалили их.

Чтобы выбрать, какое ядро ​​вы хотите использовать, при загрузке удерживайте нажатой клавишу Shift, чтобы увидеть меню Grub, прокрутите вниз с помощью клавиш со стрелками до «Advanced опции для Ubuntu ", и вы увидите меню, в котором вы можете выбрать ядро. Вам нужен один из тех, кто не говорит «(Режим восстановления)».

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

2 ответа

Для этого есть рецепт на webupd8.org.

sudo apt-get install trash-cli

Это установит команды trash, empty-trash, list-trash и restore-trash, которые вы можете использовать as-is или сделать 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 и более поздней, последняя команда в скрипте должна be trash-put "${cmd[@]}" вместо trash "${cmd[@]}" (поскольку команда изменилась с trash на trash-put).

Затем сделайте исполняемый файл сценария:

chmod +x trash-rm

Как только вы добавьте псевдоним в ваш ~ / .bashrc, который заставит bash вызывать ваш скрипт вместо фактической команды rm:

alias rm="trash-rm"

Как djeikyb правильно указывает, трюк с псевдонимом .bashrc будет работать только для пользователя, чей .bashrc изменен, и только в сеансе терминала bash.

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

13
ответ дан 25 May 2018 в 17:21
  • 1
    Это хороший ответ, но было бы лучше, если бы вы реорганизовали его, чтобы подчеркнуть основную концепцию использования псевдонима. Я думаю, что наиболее важно понимать, как «перехватывать». гт. То, что происходит на его месте, может быть настроено любым количеством способов. – djeikyb 1 November 2011 в 12:44
  • 2
    Кроме того, было бы неплохо упомянуть, что это влияет только на команду rm для сеанса bash пользователя. – djeikyb 1 November 2011 в 12:46
  • 3
    @djeikyb: спасибо за предложения, я обновил ответ – Sergey 1 November 2011 в 13:17
  • 4
    Он отлично работает для меня без скрипта (только что установлен и добавлен alias="trash"). Вы знаете, в чем преимущество наличия скрипта? – desgua 29 January 2012 в 06:03
  • 5
    @desgua: цель скрипта - сделать trash более похожим на rm в отношении удаления каталогов. Это может быть важно для некоторых сценариев, которые ожидают, что rm будет работать так, как это делается, например. Я обновил ответ. – Sergey 29 January 2012 в 06:41

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

0
ответ дан 25 May 2018 в 17:21

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

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