Wie kann ich 'rm' dazu bringen, Dateien in den Papierkorb zu verschieben?

Ich benutze das Terminal täglich, ich werde oft verwenden rm DirectoryName. Manchmal werde ich etwas ungeduldig und rm *verzichte darauf, darüber nachzudenken, ob es sicher ist. Wie Sie sich vorstellen können, sind diese Spielereien manchmal zurückgekommen und haben mich ins Gesicht geschlagen. Weiß jemand, wie ich ein Mapping erstelle, also rm whateveralles in den Papierkorb verschiebt, den ich dann manuell lösche.

du kannst tunmv /file/to/delete ~./Trash
Es ist schwierig, Stützräder an einem Präzisionswerkzeug wie rm anzubringen, ohne andere Skripte zu beschädigen. So etwas alias rm=/bin/rm -isollte Sie wieder in Sicherheit bringen. Außerdem - welches Papierkorbverzeichnis soll rm verwenden? Es wird klobig, da Mac OS X ein Papierkorbverzeichnis für jedes Volume sowie einen Papierkorb auf Benutzerebene hat.
Wenn Sie zsh verwenden, werden Sie standardmäßig aufgefordert, wenn Sie rm *oder tunrm /path/*
Entschuldigung für meinen dramatischen Kommentar, aber die Frage macht mir Angst, da Sie mit rm viel Schaden anrichten können, wenn Sie keine Backups haben oder keine Möglichkeit haben, eine Maschine neu zu installieren.
Ich möchte mich auch entschuldigen, mein Kommentar fügte Drama hinzu und verwendete „ableistische“ Wörter, die nicht annähernd so viel helfen, wie sie andere verletzen können. Ich habe mehrere Kommentare so bearbeitet, dass das Signal „Warnung / Gefahr“ erhalten bleibt, aber die Personifizierung eines Werkzeugs entfernt wird.

Antworten (7)

Schlechte Idee

Die Verwendung rmzum Verschieben von Dateien in den Papierkorb ist ein Dopamin-Hit. Es ist üblich und angenehm, kann aber aus dem Zusammenhang gerissen schlecht für Sie sein.

Sie müssen sich bei der Verwendung wirklich selbst kontrollieren rm. Vor allem, wenn Ihre Backups nicht aktuell sind oder Sie keine Zeit zum Löschen/Installieren/Wiederherstellen haben.


Verwenden Sie nicht rm

Stellen Sie sich vor , Sie gewöhnen sich daran, in den Müll zu wandern, und machen es sich zur Gewohnheit. 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 tatsächlich das Echte verwenden rm- diese Dateien für immer löschen. Ohne viel Vorbereitung und Qualifikation ist es eine schlechte Angewohnheit, und das müssen Sie wissen.

Installieren Sie es stattdessen rmtrashund machen Sie es sich zur Gewohnheit, es zu verwenden:

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

Schlechte Angewohnheiten korrigieren

Hier setzt die persönliche Beratung an – Verhaltensänderungen sind schwer. Eine andere Sache, die Sie tun können, um sich zur Verwendung zu zwingen, rmtrashist rm, es als Alias ​​für eine benutzerdefinierte Nachricht in Ihrer .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? :)

&&ist deine Lebensader. ;ist der Teufel. PS Die Antwort ist, dass im obigen Beispiel so ziemlich alles auf Ihrem System verschwindet.
Obwohl rm kein sicheres Löschen durchführt, aber das Verschieben in den Papierkorb / leeren (in meinem Setup).
Debian/Ubuntu-Benutzer installieren trash-clistattdessen, z. aptitude install trash-cli- siehe github.com/andreafrancia/trash-cli
@jm666 Sehen Sie sich auch den Papierkorb an ( Blogbeitrag & Quelle ). Es fordert den Finder auf, Dateien zu löschen. Darüber hinaus kann es auch Standard-Objective-C-Dateisystem-APIs (schneller) verwenden und bei unzureichenden Rechten auf den Finder zurückgreifen.brew install trash
rmtrashist wirklich alt, da es zuletzt 2003 aktualisiert wurde, und es zeigt sich. Es hat viel weniger Optionen als rm, und wenn Sie sagen, rmtrashauf einem sekundären Volume werden diese Dateien in den Papierkorb Ihres Benutzers auf dem Systemlaufwerk verschoben, was bei großen Dateien lange dauern kann. Die trashvon parth empfohlene Option ist besser und löst das Keep-on-same-volume-Problem, aber es fehlen immer noch viele rmOptionen.
Die beste Lösung, die ich gefunden habe, war: "rm-trash" mit ppa: nateshmbhat/rm-trash
Für diejenigen unter macOS: rmtrashist nicht mehr auf Homebrew zu finden, daher empfehle ich stattdessen die Installation trash: brew install trash.
Das Betrachten des Code-Papierkorbs änderte sich jedoch von der standardmäßigen Verwendung des Finder zu nur dem Verschieben nach ~/.Trash
cd /tnp; rm -rf *Höllenbefehl
Dies ist eine großartige SE-Antwort aus dem Lehrbuch.

Mir fallen ein Dutzend Möglichkeiten ein, dies zu codieren, aber ich weigere mich kategorisch, eine davon in eine Antwort einzugeben. Ich empfehle Ihnen dringend , Ihre Gewohnheit einzudämmen , ein wenig verrückt zu werden . Sie sollten es nicht gewohnt sein, es rmzu verwenden, wenn Sie es nicht richtig verwenden können.

Das grundlegende Problem hier ist, dass selbst wenn Sie ein Sicherheitsnetz auf Ihrem eigenen System installieren, Ihnen das nur hilft, Ihre schlechten Gewohnheiten beizubehalten, und wenn Sie eines Tages zufällig auf einem anderen Computer sind, der nicht über denselben benutzerdefinierten Schutz verfügt, werden Sie es tun tue etwas episch Schlechtes.

Die richtige Lösung besteht darin, es so zu verwenden, rmwie es verwendet werden sollte, einschließlich des manuellen Hinzufügens des -iArguments, wenn Sie Zweifel haben, wie sich ein Glob ausdehnen wird, und über gute Systemsicherungen zu verfügen, die Sie im Falle eines schwerwiegenden Benutzerfehlers wiederherstellen können. Der Versuch, "Müll" zu Befehlen hinzuzufügen, die im Rest des Universums nicht verwendet werden, ist ein halber Schritt, der das Schlimmste von beiden Welten ist.

Verwenden Sie entweder den Papierkorb oder nicht. Die Verwendungrmwandert nicht in den Papierkorb, sondern wird entfernt.

Wenn Sie den Papierkorb verwenden möchten, spricht nichts dagegen. Gewöhnen Sie sich einfach an, den rmtrashBefehl anstelle von zu verwenden rm. Das wird deinem Gehirn helfen, zu verstehen, was passiert, und dich nicht in eine schlechte Angewohnheit versetzen, die dir später Kummer bereiten wird.

Ihr Punkt wird in diesem Fall nicht berechnet. Die Leute löschen täglich versehentlich Dinge, Systemsicherungen funktionieren nicht im Fall eines Heim-PCs (was meiner ist), da die Ressourcen begrenzt sind, eine Verschiebung in den Papierkorb ist für mich eine weitaus effizientere Art, mit diesen Löschungen umzugehen Anwendungsfall.
@steve du hast den Punkt komplett verfehlt. rmper Definition entfernt eine Datei von der Festplatte. Es schickt es nicht in den Papierkorb. Wenn Sie sich selbst beibringen, zu verwenden, wenn Sie in den Papierkorb sendenrm meinen , bereiten Sie sich auf eine Katastrophe vor. Wenn Sie in den Papierkorb senden möchten, verwenden Sie oder ein Programm, das für diesen Job entwickelt wurde, dann werden Sie später nicht in Alpträume laufen. 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 dafür vorgesehen ist! rmtrash
brew install rmtrashund hör auf zu benutzenrm
Dies ist eine großartige Antwort, die einige Dinge für mich geklärt hat. Ich werde versuchen, es mir zur Gewohnheit zu machen, rmtrashstatt rm.
" rm entfernt per Definition eine Datei von der Festplatte." Nr. rm hebt die Verknüpfung der Datei auf. Es entfernt es nicht.

Verwenden Sie ein Befehlszeilentool wie rmtrash (das die Datei(en) normalerweise nur nach ~/.Trash verschiebt und sicherstellt, dass die Datei einen eindeutigen Namen hat) oder ein Skript, das appscript verwendet, um den Finder zum Löschen aufzurufen. Letzteres ist langsamer, fügt aber die Möglichkeit hinzu, die Option Zurücksetzen aus dem Finder zu verwenden, um die Datei einfach wiederherzustellen.

Ich habe Papierkorb verwendet, wie er in MacPorts und Homebrew enthalten ist, und rmtrash ist jetzt sehr alt und wird nicht mehr gewartet. Beim Lesen der Codeänderungen beim Bearbeiten dieser Notiz bemerkte ich jedoch, dass sie sich 2017 von der standardmäßigen Verwendung des Finders zu einer standardmäßigen Verschiebung geändert hat (was nicht das war, was ich wollte und eine große Änderung darstellt). Also werde ich mich nach einem anderen Tool umsehen.

Wie in den Kommentaren erwähnt, ist es keine gute Idee, rm zu einem Alias ​​zu machen. Denken Sie am besten daran, das von Ihnen installierte Papierkorbprogramm direkt zu verwenden

Aber wenn du wolltest, könntest du es tun

Nachdem Sie rmtrash installiert haben, sagen Sie /usr/local/bin/rmtrash, dann können Sie einen Alias ​​für bash erstellen

alias rm='rmtrash'

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

Wenn Sie ein Tool wie verwenden rmtrash, tun Sie sich bitte einen Gefallen und verwenden Sie es unter seinem eigenen Namen . Aliasiere niemals Dinge, die nicht sollen rm, rmes wird dich eines Tages beißen.
rmtrashist nicht kompatibel mit rm(unterstützt nicht die gleichen Befehlszeilenparameter wie -r), daher ist ein Alias ​​in keinem Fall wirklich nützlich
Es ist keine gute Idee, einen Alias rmtrash​​zu verwenden rm. Sie sind nicht nur nicht kompatibel, sondern erzwingen auch die schlechte Angewohnheit, und Sie werden versehentlich rmin einem anderen System verwenden, weil Sie denken, dass Sie nur rmtrash.

Ich möchte nur eine hilfreiche Gewohnheit für diejenigen hinzufügen, die dies noch nicht tun. Bevor Sie rm für irgendetwas verwenden, machen Sie zuerst 'ls' darauf. Auf diese Weise können Sie alle Dateien sehen, die Sie löschen möchten. Anstatt es erneut einzugeben, ziehen Sie einfach den vorherigen Befehl „ls“ nach oben und tauschen Sie ls gegen rm aus. Diese Gewohnheit hat viel Angst beim Aufrufen von rm reduziert.

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

Glauben Sie nicht eine Minute, dass Ihnen das Ändern der Befehlsumgebung helfen wird. Zum Beispiel werden Sie überall im Internet Leute finden, die Folgendes 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 jede Menge Anwendungsfälle, bei denen diese kleinen Salontricks Sie kläglich im Stich lassen.

Der einzige robuste Weg, den ich bisher verwendet habe, um mich vor der Gefahr zu rmschützen, besteht darin, einen regelmäßigen Backup-Prozess über cron über die Verzeichnisse einzurichten, in denen ich arbeite. Raw UNIX erledigt dies sehr einfach für Sie, indem findes in Verbindung mit -mtimeverwendet, um nach Dateien zu suchen, die innerhalb oder seit einer bestimmten Zeit aktualisiert wurden.

Einführung (kann übersprungen werden)

Für mich rm -iwürde das reichen, denn es fordert Sie vor dem Löschen einer beliebigen Datei auf. Etwas zusätzliche Sicherheit, die von bereitgestellt wird, safe-rmist jedoch überhaupt 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 dafür sorgen, dass -iimmer danach kommt -f!


Meine Lösung (3 Schritte):

  • Safe-rm installieren:brew install safe-rm

    Sie können immer noch mit arbeiten , aber Sie müssen im nächsten Schritt rmdie ändernRM_BIN

  • 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, damit die Aktualisierungen im .profile angewendet werden. NICHT vor einem Logout/Login verwenden!


Anmerkungen:

  • Es kann mit geringfügigen Änderungen auf jede Linux-Distribution angewendet werden.
  • Es bringt Ihre Mitarbeiter NICHT dazu, sich zu verprügeln. Es fragt Sie nur, bevor Sie jede Datei löschen!
  • Es funktioniert mit -rfund mit Regexes.
  • Wenn Sie wirklich verwenden möchten, rm -rf OHNE nach jeder einzelnen Datei / jedem einzelnen Ordner gefragt zu werden, können Sie sie noch verwenden /bin/rm -rf(oder safe-rm -rfwenn Sie sie installiert hatten).
  • Kein unbeabsichtigtes rm -rf oder rm * mehr ;)
Das Aliasing von rm auf irgendetwas, das größer ist als es selbst (z. B. alias rm='sudo rm'), ist wie das Anschnallen einer Uzi an ein Küchenmesser: Eines Tages werden Sie mehr bekommen, als Sie erwartet haben, wenn Sie diese Ananas schneiden. rm etwas Kleineres als sich selbst zuzuordnen (z. B. alias rm='rmtrash') ist, als würde man seine Kinder mit entwaffneten Handgranaten spielen lassen und ihnen nicht beibringen, was sie eigentlich sind: Wenn sie eines Tages auf eine echte stoßen, werden sie sie nicht mit der gebotenen Vorsicht behandeln. Wie auch immer – das Aliasing von rm ist schlecht für Systemadministratoren, da mangelnde Hygiene die persönliche Sicherheit und die öffentliche Gesundheit beeinträchtigt!
Die Verwendung von so etwas wie safe-rm ist ein vernünftiger Ratschlag. Ein Aliasing auf rm ist nicht möglich. Verwenden Sie es unter seinem eigenen Namen oder einem eindeutigen Alias, damit Sie ein Sicherheitsnetz nicht als selbstverständlich ansehen, das nicht immer vorhanden sein wird.
Ich weiß, worauf du hinauswillst. ABER der Grund, warum ich das getan habe, ist, dass ich mit vielen Terminals arbeite. Einige Remote-Terminals und einige Einheimische. Und ich möchte viele Granaten auf die entfernten Terminals werfen, aber wenn ich versehentlich das Sicherheitssiegel auf dem lokalen Terminal ziehe, möchte ich eine Warnung sehen, bevor die Explosion auftritt.
@Paschalis und was passiert, wenn ein Skript oder installiertes Programm verwendet werden muss rm? Außerdem ist Calebs Argument sogar noch gültiger – wenn Sie sich an ein System mit Safe-RM-Aliasing gewöhnen, werden Sie möglicherweise leichtsinnig damit und verwenden es schließlich auf einem System mit einem rm ohne Aliasing.
Beachten Sie auch, dass es verschiedene Inkarnationen von Safe-RM gibt. Ein ZSH-Plugin zum Verschieben von Dateien in den Papierkorb, ein Perl-Skript zum Sperren wichtiger Ordner usw. und eine Rust-Version desselben.

Mac bigSur

brew install trash

alias rm='trash'
which rm

touch a.md
rm a.md
ls ~/.Trash
Warum funktioniert das nur bei Big Sur?