9

Я привык к тому , rm псевдоним что - то более безопасным.

Я использую osx-trash , но как только я обновляюсь до Ruby 1.9.2, это перестает работать.

Я знаю о trash-cli из Python, но я бы предпочел что-то, что перемещает файлы в папку Trash в OS X, а не в другой каталог.

У кого-нибудь есть хорошее решение?

3 ответа3

8

Для OSX вы можете использовать safe-rm

brew install safe-rm

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

echo $PATH

Для меня у меня /usr/local/bin: первых, тот же каталог, что и для установки safe-rm

Добавить символическую ссылку на safe-rm

ln -s /usr/local/bin/safe-rm /usr/local/bin/rm

Чтобы удалить и восстановить rm по умолчанию, вы можете удалить символическую ссылку rm /usr/local/bin/rm

Файл конфигурации может быть добавлен в /etc/safe-rm.conf

например:

/private
/Applications
/Developer
/Library
/Network
/System
/Users
/Volumes
/test

Test с помощью команды rm -rf /test будет запрещать удаление из safe-rm.conf

3

hasseg.org/trash - это утилита Objective-C, такая как osx-trash.

Я написал функцию оболочки, которая не перезаписывает такие файлы, как mv * ~/.Trash бы. Тем не менее, он всегда перемещает элементы в начальный том.

trash() {
    for f in "$@"; do
        bn=$(basename "$f")
        while [ -e ~/.Trash/"$bn" ]; do
            bn="$bn $(date +%H.%M.%S %p)"
        done
        mv "$f" ~/.Trash/"$bn"
    done
}
2

Введение (вы можете пропустить это)

Для меня было бы достаточно rm -i , потому что он запрашивает вас перед удалением любого файла. Однако некоторая дополнительная безопасность, обеспечиваемая safe-rm вовсе не плохая идея.

Простого alias такого как rm=safe-rm -i может быть достаточно, однако rm -rf не будет работать, потому что -i переопределяется на -f .

Итак, мы должны убедиться, что -i всегда идет после -f !


Мое решение (3 шага):

  • Установить safe-rm: brew install safe-rm

    Вы все еще можете работать с rm , но вы должны изменить RM_BIN на следующем шаге

  • Отредактируйте ваш ~/.profile (или bash_profile или любой другой) и поместите следующий фрагмент кода (который содержит alias и function):

    alias rm="rm_i"
    
    function rm_i(){
    RM_BIN=safe-rm # you can replace it with regular rm if you like
    
    args=""
    files=""
    argsDone=0 # to make sure arguments are before the files
    
    for var in "$@"
    do
        if [[ $var == \-* ]] ; then
            if [ $argsDone -eq 1 ] ; then
                $RM_BIN # just to show the usage of rm
                return
            fi
            args+=" $var"
        else
            argsDone=1
            files+=" $var"
        fi
    done
    
    args+=" -i" # Put -i at the end (so rm -rf will not ignore it)
    
    $RM_BIN $args $files
    }
    
  • Наконец , logout и login , чтобы обновления в .profile были применены. НЕ используйте его до выхода / входа!


Заметки:

  • Его можно применить к любому дистрибутиву Linux с небольшими изменениями.
  • Это НЕ перемещает ваш персонал в трэш. Он просто спрашивает вас перед удалением каждого файла!
  • Работает с -rf и с регулярными выражениями.
  • Если вы действительно хотите использовать rm -rf БЕЗ запроса на каждый отдельный файл / папку, вы все равно можете использовать /bin/rm -rf (или safe-rm -rf если вы его установили).
  • Больше никаких непреднамеренных rm -rf или rm * ;)

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