Безпечний замінник OS X `rm`?


9

Я звик мати rmпсевдонім щось безпечніше.

Я використовував osx-trash, але як тільки я переходжу на Ruby 1.9.2, це перестає працювати.

Я знаю про trash-cliPython, але я б більше віддав перевагу тому, що переміщує файли в папку Trash в OS X, а не в інший каталог.

Хтось має хороше рішення?


9
Будь ласка, не звикайте до інопланетян rm, скоріше звикайте mv files/to/be/deleted ~/.Trash. Це безпечно і стабільно в усіх системах.
Асмус

Асмус: Ви бачите, що це працює лише в тому випадку, якщо ваш Mac має лише 1 розділ. Якщо у вас інший розділ, перехід до ~ / .Trash насправді не правильний (мій розділ ~ недостатньо великий).
зник

1
Ну, ви повинні сказати у своєму питанні, що у вас є кілька розділів!
slhck

1
зникли: ну, я думаю, mvце все-таки ваша найбезпечніша ставка. Ви можете легко створити нову папку на своєму іншому розділі під назвою Trash(або, як вам це подобається), а потім mvфайли там. Коли ви впевнені, що їх можна видалити, видаліть і відтворіть цю повну папку.
Асмус

і тоді ви можете просто мати ~ / .Trash - це м'яке посилання на папку Trash на розділі, на якому є достатньо місця
AlcubierreDrive

Відповіді:


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

Тест із rm -rf /testним заборонить видалення зsafe-rm.conf


може бути добре додати також /до списку шляхів, які не слід видаляти, щоб запобігти класичному rm -fr /
Mikael Lepistö

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
}

Так, у мене є більше 1 розділу, і я хотів би зберегти видалені файли в одному розділі, а не переміщувати їх поперек
зник

Я додав посилання на дві інші утиліти та ще одну функцію. Кожен з них повинен зберігати файли в одному розділі.
Лрі

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 * ;)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.