Sicherer Ersatz für OS X `rm`?

9

Ich bin es gewohnt, rmetwas Sichereres aliasen zu müssen.

Ich habe verwendet osx-trash, aber sobald ich auf Ruby 1.9.2 aktualisiert habe, funktioniert dies nicht mehr.

Ich weiß trash-clivon Python, aber ich würde etwas vorziehen, das Dateien in den Papierkorb in OS X verschiebt, anstatt in ein anderes Verzeichnis.

Hat jemand eine gute Lösung?

verschwunden
quelle
9
Bitte gewöhne dich nicht an einen Alias rm, sondern gewöhne dich lieber daran mv files/to/be/deleted ~/.Trash. Es ist sicher und systemübergreifend konsistent.
Asmus
Asmus: Sie sehen, dass dies nur funktioniert, wenn Ihr Mac nur eine Partition hat. Wenn Sie eine andere Partition haben, ist das Verschieben nach ~ / .Trash nicht wirklich korrekt (meine ~ Partition ist nicht groß genug).
verschwunden
1
Nun, Sie hätten in Ihrer Frage erwähnen sollen, dass Sie mehrere Partitionen haben!
Slhck
1
verschwunden: Nun, ich denke, es mvist immer noch Ihre sicherste Wette. Sie können leicht einen neuen Ordner auf Ihrer anderen Partition namens Trash(oder wie auch immer Sie möchten) und dann mvdie Dateien dort erstellen. Wenn Sie sicher sind, dass sie gelöscht werden können, löschen Sie den vollständigen Ordner und erstellen Sie ihn neu.
Asmus
und dann können Sie einfach ~ / .Trash als Softlink zum Papierkorbordner auf der Partition verwenden, der über genügend Speicherplatz verfügt
AlcubierreDrive

Antworten:

8

Für OSX können Sie verwenden safe-rm

brew install safe-rm

Sie müssen einen zusätzlichen Schritt ausführen, um ihn dem Standard vorzuziehen rm- fügen Sie einen Symlink hinzu.

echo $PATH

Für mich habe ich /usr/local/bin:zunächst das gleiche Verzeichnis wie safe-rminstall

Symlink hinzufügen zu safe-rm

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

Um die Standardeinstellung zu entfernen und wiederherzustellen rm, können Sie den Symlink entfernenrm /usr/local/bin/rm

Die Konfigurationsdatei kann unter hinzugefügt werden /etc/safe-rm.conf

z.B:

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

Wenn rm -rf /testSie damit testen , wird das Löschen von verweigertsafe-rm.conf

David Thomas
quelle
könnte gut sein, auch /zur Liste der Pfade hinzuzufügen , die nicht gelöscht werden sollten, um klassische rm -fr /
Mikael Lepistö
3

hasseg.org/trash ist ein Objective-C-Dienstprogramm wie osx-trash .

Ich habe eine Shell-Funktion geschrieben, die Dateien nicht wie mv * ~/.Trashgewünscht überschreibt . Es werden jedoch immer Elemente auf das Startvolume verschoben.

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
}
Lri
quelle
Ja, ich habe mehr als eine Partition und ich möchte die gelöschten Dateien in derselben Partition behalten, anstatt sie zu verschieben
verschwunden
Ich habe Links zu zwei anderen Dienstprogrammen und einer anderen Funktion hinzugefügt. Jeder von ihnen sollte die Dateien auf derselben Partition behalten.
Lri
2

Einführung (Sie können es überspringen)

Für mich rm -iwäre das genug, weil es Sie vor dem Löschen einer Datei auffordert. Eine gewisse zusätzliche Sicherheit von safe-rmist jedoch keine schlechte Idee.

Ein einfaches aliasLike rm=safe-rm -i könnte ausreichen, rm -rfwürde aber nicht funktionieren, da -ies von überschrieben wird -f.

Also müssen wir sicherstellen, dass das -iimmer danach kommt -f!


Meine Lösung (3 Schritte):

  • Installieren Sie safe-rm: brew install safe-rm

    Sie können weiterhin damit arbeiten rm, müssen dies jedoch RM_BINim nächsten Schritt ändern

  • Bearbeiten Sie Ihr ~/.profile(oder bash_profile oder was auch immer) und fügen Sie das folgende Code-Snippet ein (das ein aliasund ein enthält 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
    }
    
  • Schließlich , logoutund login, so die Aktualisierungen in der .profile angewandt werden. Verwenden Sie es NICHT vor dem Abmelden / Anmelden!


Anmerkungen:

  • Es kann mit geringfügigen Änderungen auf jede Linux-Distribution angewendet werden.
  • Es bewegt Ihre Mitarbeiter NICHT dazu, sich zu verprügeln. Sie werden nur gefragt, bevor Sie jede Datei löschen!
  • Es funktioniert mit -rfund mit regulären Ausdrücken.
  • Wenn Sie wirklich rm -rf OHNE nach jeder einzelnen Datei / jedem Ordner gefragt werden möchten, können Sie diese weiterhin verwenden /bin/rm -rf(oder safe-rm -rfwenn Sie sie installiert haben).
  • Nicht mehr unbeabsichtigt rm -rf oder rm * ;)
Paschalis
quelle