Wie kann ich dafür sorgen, dass "rm" Dateien in den Papierkorb verschoben werden?

62

Ich benutze das Terminal täglich, ich werde es oft benutzen rm DirectoryName. Manchmal werde ich ein bisschen verrückt und mache es rm *. Wie Sie sich vorstellen können, sind diese Shenanigans manchmal zurückgekommen und haben mir ins Gesicht geschlagen. Weiß jemand, wie ich ein Mapping erstelle, so rm whateververschiebt sich alles in den Mülleimer, den ich dann manuell lösche.

Steve
quelle
3
Sie können tunmv /file/to/delete ~./Trash
6
Es ist schwierig, Trainingsräder auf ein Präzisionswerkzeug wie rm zu setzen, ohne andere Skripte zu beschädigen. Etwas wie alias rm=/bin/rm -isollte Sie sicher aus Ihrem Verrückten heraus trainieren . Außerdem: Welches Papierkorbverzeichnis soll rm verwenden? Es wird unübersichtlich, da Mac OS X für jedes Volume ein Papierkorbverzeichnis sowie einen Papierkorb auf Benutzerebene hat.
bmike
1
Wenn Sie zsh verwenden, werden Sie standardmäßig dazu aufgefordert, rm *oderrm /path/*
Daniel Serodio
1
Fügen Sie mich zu der Liste der Leute hinzu, die denken, dass dies eine so abscheulich gefährliche Frage ist, die zu beantworten ist. Wenn Sie für mich arbeiten würden, würde ich mich bemühen, Sie nicht zu schlagen, bis Sie NIEMALS versprochen haben, an einer Shell-Eingabeaufforderung "ein wenig verrückt zu werden" und Befehle wie "rm" auszugeben. Ich würde auch doppelt darauf achten, dass Sie für keine Maschine, für die ich verantwortlich bin oder die ich benutze, sudo-Administratorrechte haben. Bevor ich "rm" oder "sudo" eingebe, stehe ich physisch auf und frage mich, ob ich zu 100% sicher bin, dass ich die Auswirkungen dessen, was ich tun werde, verstehe. Vielleicht musst du nur eine "rm-rf" machen und für eine Weile leiden.
Wilfred Smith
Entschuldige mich im Voraus, wenn mein Kommentar brutal erscheint, aber die eigentliche Frage entsetzt mich.
Wilfred Smith

Antworten:

79

Schlechte Idee

Das rmVerschieben von Dateien in den Papierkorb ist wie Unkraut. Es ist üblich und erfreulich, kann aber in Zukunft schlecht für Sie sein. ;)

Sie müssen sich bei der Verwendung wirklich beherrschen rm.


Benutze nicht rm

Stellen Sie sich vor , Sie gewöhnen sich daran , in den Müll zu ziehen und sich daran zu gewöhnen . Sicher, Ihr System ist sicher, aber wenn Sie sich in das Notizbuch eines Freundes (oder Ihrer Frau oder Ihres Chefs) einloggen und etwas löschen müssen? Sie werden das echte rmLöschen dieser Dateien tatsächlich für immer verwenden. Es ist eine schlechte Angewohnheit, und das müssen Sie wissen.

Installieren Sie es stattdessen rmtrashund machen Sie es sich zur Gewohnheit:

# install rmtrash, (either from the macports or by the brew.)
$ alias trash="rmtrash"
$ alias   del="rmtrash"       # del / trash are shorter than rmtrash

Schlechte Gewohnheiten korrigieren

Sie können sich auch dazu zwingen , eine benutzerdefinierte Nachricht in Ihrer Nachricht zu verwenden, rmtrashanstatt sie rmals Alias ​​zu verwenden .profile.

alias rm="echo Use 'del', or the full path i.e. '/bin/rm'"

Wenn Sie also verwenden rm, werden Sie aufgefordert, entweder rmtrashoder zu verwenden /bin/rm. Denken Sie daran, dass dies nur vorübergehend ist. Nach einer Weile sollten Sie den Alias ​​entfernen.


Mach niemals so etwas:

$ pwd
/
$ cd /tnp; rm -rf *
sh: cd: /tnp: No such file or directory

Pop Quiz: In welchem ​​Verzeichnis wird der rmBefehl ausgeführt? :)

Ps: Ich habe gerade einige unerwünschte Änderungen an diesem Beitrag entfernt, wodurch ein paar Unsinnigkeiten in Bezug auf die Aliase entstanden sind.

jm666
quelle
14
&&ist deine Lebensader. ;ist der Teufel. PS Die Antwort ist, dass im obigen Beispiel so ziemlich alles auf Ihrem System verschwindet.
Jason Salaz
Obwohl rm sicheres Löschen nicht tut, tut es das Verschieben in den Papierkorb / leer (in meinem Setup).
Mike Graf
1
Debian / Ubuntu-Benutzer installieren trash-clistattdessen, z. aptitude install trash-cli- siehe github.com/andreafrancia/trash-cli
Daniel Sokolowski
@ jm666 Lies auch den Papierkorb ( Blogpost & Quelle ). Es fordert Finder auf, Dateien in den Papierkorb zu werfen. Darüber hinaus können Standard-Objective C-Dateisystem-APIs (schneller) und bei unzureichenden Rechten ein Fallback auf Finder verwendet werden. brew install trash
parth
rmtrashist wirklich alt, wurde zuletzt im Jahr 2003 aktualisiert, und es zeigt. Es hat viele weniger Optionen als rm, und wenn Sie sagen , rmtrashauf einem sekundären Band es bewegt sich diese Dateien in Ihrem Benutzer-Ordner Papierkorb auf dem Systemlaufwerk, das eine lange Zeit für große Dateien nehmen. Die trashvon parth empfohlene Option ist besser, da sie das Problem des gleichbleibenden Volumens löst, aber immer noch viele rmOptionen fehlen .
Warren Young
25

Ich kann mir ein Dutzend Möglichkeiten vorstellen, dies zu kodieren, lehne es jedoch kategorisch ab, eine Antwort darauf einzutippen. Ich empfehle Ihnen nachdrücklich , Ihre Gewohnheit , ein wenig verrückt zu werden, zu unterbinden . Sie sollten es sich nicht zur Gewohnheit machen, es zu benutzen, rmwenn Sie es nicht richtig benutzen können.

Das grundlegende Problem dabei ist, dass selbst wenn Sie ein Sicherheitsnetz auf Ihrem eigenen System installieren, dies nur dazu beiträgt, Ihre schlechten Gewohnheiten beizubehalten, und wenn Sie sich eines Tages auf einem anderen Computer befinden, der nicht über die gleichen benutzerdefinierten Schutzfunktionen verfügt Mach etwas sehr Schlimmes.

Die richtige Lösung ist die Verwendung, rmwie sie vorgesehen war, einschließlich des manuellen Hinzufügens des -iArguments, wenn Sie sich nicht sicher sind, wie ein Glob erweitert werden soll, und guter Systemsicherungen, die Sie bei schwerwiegenden Benutzerfehlern wiederherstellen können. Der Versuch, Befehle, die im Rest des Universums nicht verwendet werden, mit "Müll" zu versehen, ist auf halbem Weg der schlimmste von beiden.

Entweder den Müll benutzen oder nicht. Mitrmgeht nicht in den Papierkorb, sondern wird entfernt.

Wenn Sie den Papierkorb verwenden möchten, ist daran nichts auszusetzen. Gewöhnen Sie sich einfach an, den rmtrashBefehl anstelle von zu verwenden rm. Dies wird Ihrem Gehirn helfen, zu verstehen, was passiert, und Sie nicht in eine schlechte Angewohnheit bringen, die später Trauer verursachen wird.

Caleb
quelle
1
Ihr Punkt wird in dieser Instanz nicht berechnet. Menschen löschen Dinge versehentlich auf einer täglichen Basis, System-Backups funktionieren nicht bei einem Heim-PC (der mir gehört), da die Ressourcen begrenzt sind. Ein Umzug in den Mülleimer ist eine weitaus effizientere Möglichkeit, diese Löschvorgänge für mich zu handhaben Anwendungsfall.
Steve
5
@ Steve Sie haben den Punkt völlig verpasst. rmper definitionem entfernt eine datei von der festplatte. Es wird nicht in den Papierkorb verschoben. Lehre selbst zu verwenden , rmwenn Sie bedeuten in den Papierkorb senden Sets Sie für eine Katastrophe auf. Wenn Sie etwas in den Papierkorb werfen rmtrashoder ein Programm verwenden möchten, das für diesen Job entwickelt wurde, werden Sie später nicht auf Albträume stoßen. Ich habe nicht gesagt, dass die Verwendung des Papierkorbs von Natur aus falsch ist, aber wenn Sie ihn verwenden möchten, verbinden Sie ihn nicht mit etwas, das nicht für die Verwendung vorgesehen ist!
Caleb
2
brew install rmtrashund aufhören zu benutzenrm
GabLeRoux
Dies ist eine großartige Antwort, die ein paar Dinge für mich geklärt hat. Ich werde versuchen, eine Angewohnheit zu bilden, rmtrashanstatt zu verwenden rm.
Sheharyar,
sudo add-apt-repository ppa: nateshmbhat / rm-trash. Dann installieren Sie "rm-trash"
Natesh Bhat
3

Es gibt Möglichkeiten, sich vor schrecklichen Folgen zu schützen rm. Ich stimme jedoch den anderen Kommentatoren hier zu: Sehr wenige sind gut.

Glauben Sie nicht für eine Minute, dass das Ändern der Befehlsumgebung Ihnen helfen wird. Zum Beispiel werden Sie überall Leute finden, die diese Art von Dingen empfehlen:

alias rm="rm -i"

oder

function rm()
{
    echo >&2 'rm forbidden; use "/bin/rm"'
}
export -f rm

Das wird nicht funktionieren. Zeitraum. Es gibt eine Menge von Anwendungsfällen, in denen diese kleinen Salon-Tricks Sie kläglich scheitern lassen.

Der einzige robuste Weg, mit dem ich mich der Gefahr entzogen habe, rmist die Einrichtung eines regelmäßigen Sicherungsprozesses durch cron über die Verzeichnisse, in denen ich arbeite. Raw UNIX erledigt dies sehr einfach für Sie und sucht findin Verbindung mit -mtimenach Dateien, die innerhalb oder seit einer bestimmten Zeit aktualisiert wurden.

Jim Campbell
quelle
+1 für cronalleine. Danke :)
bmike
2

Verwenden Sie ein Befehlszeilenprogramm wie rmtrash oder ein Skript, das appscript verwendet, um den Finder aufzurufen und dort zu löschen.

Nachdem Sie rmtras installiert haben, sagen Sie / usr / local / bin / rmtrash und erstellen Sie einen Alias ​​für bash

alias rm='rmtrash'

Mit \ rm können Sie rm direkt aufrufen und den Alias ​​ignorieren

user151019
quelle
14
Wenn Sie ein Tool wie dieses verwenden rmtrash, tun Sie sich selbst einen Gefallen und verwenden Sie es unter seinem eigenen Namen . Alias ​​nie Dinge, die nicht rmzu rm, es wird dich eines Tages beißen.
Caleb
1
rmtrashist nicht kompatibel mit rm(unterstützt nicht die gleichen Befehlszeilenparameter wie -r), daher ist ein Alias ​​auf keinen Fall nützlich
Perry
Es ist eine schlechte Idee, einen Pseudonym rmtrashzu verwenden rm. Sie sind nicht nur nicht kompatibel, sondern verstärken auch die schlechte Angewohnheit und werden versehentlich rmin einem anderen System verwendet, das denkt, dass Sie nur verwenden rmtrash.
Fayaz,
1

Ich möchte nur eine hilfreiche Angewohnheit für diejenigen hinzufügen, die dies noch nicht tun. Bevor Sie rm für irgendetwas verwenden, müssen Sie zuerst 'ls' darauf ausführen. Auf diese Weise können Sie alle Dateien anzeigen, die Sie löschen möchten. Statt erneut zu tippen, ziehen Sie einfach den vorherigen Befehl 'ls' nach oben und tauschen Sie ls gegen rm aus. Diese Angewohnheit hat viel Angst beim Aufrufen von rm reduziert.

Scott Bridgman
quelle
-1

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

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

Ein einfaches aliasLike rm=safe-rm -i könnte reichen, rm -rfwürde aber nicht funktionieren, weil -ies von übersteuert wird -f.

Also müssen wir dafür sorgen, dass -iimmer danach kommt -f!


Meine Lösung (3 Schritte):

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

    Sie können weiterhin damit arbeiten rm, aber Sie haben das RM_BINim nächsten Schritt geändert

  • Bearbeiten Sie Ihr ~/.profile(oder bash_profile oder was auch immer) und fügen Sie den folgenden Codeausschnitt ein (der 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. NICHT vor einem Logout / Login benutzen!


Anmerkungen:

  • Es kann mit geringfügigen Änderungen auf jede Linux-Distribution angewendet werden.
  • Es bewegt NICHT Ihre Mitarbeiter, um zu verprügeln. Es fragt Sie nur, bevor Sie jede Datei löschen!
  • Es funktioniert mit -rfund mit Regexen.
  • Wenn Sie wirklich verwenden möchten, rm -rf OHNE nach jeder einzelnen Datei / Ordner gefragt zu werden, können Sie sie weiterhin verwenden /bin/rm -rf(oder safe-rm -rfwenn Sie sie installiert haben).
  • Nie mehr ungewollt rm -rf oder rm * ;)
Paschalis
quelle
5
Ein Aliasing von rm auf etwas Größeres als sich selbst (z. B. alias rm='sudo rm') ist, als würde man einen Uzi an ein Küchenmesser schnallen: Eines Tages werden Sie mehr bekommen, als Sie erwartet hatten, wenn Sie diese Ananas schneiden. Ein Aliasing von rm auf etwas Kleineres als sich selbst (z. B. alias rm='rmtrash') bedeutet, Ihre Kinder mit entwaffneten Handgranaten spielen zu lassen und ihnen nicht beizubringen, was sie tatsächlich sind. In jedem Fall ist Aliasing für Ihre persönliche Sicherheit und die öffentliche Gesundheit schädlich!
Caleb
2
Die Verwendung von so etwas wie safe-rm ist ein vernünftiger Rat. Ein Aliasing auf rm ist es nicht. Verwenden Sie es unter seinem eigenen Namen oder einem eindeutigen Alias, damit Sie nicht davon ausgehen, dass ein Sicherheitsnetz nicht immer vorhanden ist.
Caleb
Ich verstehe dein Argument. ABER der Grund, warum ich das getan habe, ist, dass ich mit vielen Terminals arbeite. Einige entfernte Terminals und einige Einheimische. Und ich möchte viele Granaten auf die entfernten Terminals werfen , aber wenn ich versehentlich das Sicherheitssiegel am lokalen Terminal ziehe , möchte ich eine Warnung sehen, bevor die Explosion auftritt.
Paschalis
@Paschalis und was passiert, wenn ein Skript oder ein installiertes Programm verwendet werden muss rm? Der Punkt von Caleb ist sogar noch wichtiger: Wenn Sie sich an ein System mit Safe-RM-Alias ​​gewöhnt haben, werden Sie möglicherweise leichtsinnig und können es schließlich auf einem System mit einem unaliasierten RM verwenden.
Manishearth