Wie kann ich einen rm-Befehl abbrechen?

9

Es gibt viele Fragen zum Rückgängigmachen eines fertigen rm Befehls. In meinem Fall fragte mein rm: "Sind Sie sicher, dass Sie diese Datei löschen möchten?"

Und ich muss für jeden von ihnen bestätigen. Anstatt "j / n" manuell zu bestätigen:

  1. Kann ich für den Rest "Ja" setzen, während ich nach j / n für die n-te Datei gefragt werde? (entspricht dem Kontrollkästchen "Ja zu allen" unter Windows) (Ich kenne den yes | rmTrick vor dem Start)

  2. Kann ich den Vorgang abbrechen, während ich nach j / n für die n-te Datei gefragt werde? (außer zum Herunterfahren der Maschine :))

Andrejs
quelle
10
Drücken Sie einfach Strg-C und starten Sie es erneut? Übrigens, mit -f sollte es dich nichts fragen - das ist der Sinn von -f.
user253751
Sie haben Recht, "-f" aus dem Titel meiner Frage entfernt.
Andrejs

Antworten:

19

Um Anforderung 1 zu erfüllen, müssen Sie ein komplexeres Programm verwenden, als N-mal yeszu senden yund dann darüber hinaus Tastatureingaben weiterzuleiten. Sie können es nur tun, rmwenn Sie immer fragen ( rm -i) oder nie fragen ( rm -f).

Sie können jederzeit abbrechen , rmindem

  • Drücken Sie Strg-C, um es zu unterbrechen (sendet SIGINT).
  • Drücken Sie Strg-Z, um es zu stoppen (sendet SIGSTOP) und töten Sie es dann.
  • Senden eines SIGTERM ( kill) oder
  • Sende ihm ein SIGKILL ( kill -9).

Dadurch werden rmbereits ausgeführte Dateivorgänge nicht rückgängig gemacht , es werden jedoch keine weiteren Dateivorgänge ausgeführt. Wenn der rmProzess derzeit zur Benutzereingabe auffordert, werden keine aktiven Dateien freigegeben, sodass das Beenden des Vorgangs lediglich die Fortsetzung verhindert.

Casey
quelle
Was ist yes | head -9 | rm...mit 9 (zum Beispiel) Ja?
Jeff Schaller
2
@ JeffSchaller Das würde ohne Eingabe zum 9. Jahr kommen, aber Sie könnten nicht zum 10. Jahr antworten.
Casey
1
Man könnte die { yes | head -n9; yes n; } | rm -i …ersten 9 Dateien löschen und dann für alle verbleibenden Dateien mit "Nein" antworten (und natürlich könnte der { … }Teil erweitert werden, um jede mögliche Kombination von Zahlen abzudecken).
Zrajm
4
... obwohl ich nicht sehe, wofür es nützlich sein könnte. Wenn Sie wissen, welche Dateien nicht oder nicht verknüpft sein sollen, geben Sie die richtigen Argumente an, rmanstatt verdrehte, unzuverlässige Befehle zu erstellen .
Spektren
10

GNU rm unterstützt -i, von dem ich annehme , dass es das ist, worauf Sie sich beziehen, und bittet um Bestätigung für jede Datei, aber auch -I, was ein wenig anders ist:

-I     prompt once before removing  more  than  three  files,  or  when
       removing  recursively.  Less intrusive than -i, while still giv‐
       ing protection against most mistakes

Zur Frage , ob es möglich ist, eine Interaktion mit rm zu stoppen , nachdem es begonnen hat, hitting Ctrl- Csollte es tun.

dhag
quelle
2

Mit Ctrl+ können cSie den Vorgang abbrechen.

Wenn Sie jedoch in Ihre .bashrcDatei schauen , können Sie den Alias ​​kommentieren, der die Bestätigung -ierzwingt. Dabei wird der Parameter als erklärter Dhag verwendet.

In dir .bashrcfindest du einen Eintrag wie diesen:

alias rm='rm -i'

Wenn Sie es kommentieren, rm -ffunktioniert Ihr Testament direkt

lese
quelle
1

Unter bashkönnen Sie einen Alias ​​umgehen, indem Sie \dem Befehl ein a voranstellen

rm filename

wird

\rm filename
Andrew Henle
quelle
2
Ich verstehe nicht, wie dies etwas mit meiner Frage zu tun hat, wie man den rm-Prozess unterbricht
Andrejs
@AndreyDoronin Es befasst sich mit Ihrer Verwendung von Ansätzen, wie ich den yes | rmTrick vor dem Start kenne
Andrew Henle
@AndreyDoronin> Hier erfahren Sie, wie Sie nicht fragen müssen, wie der rm-Prozess aus den von Ihnen in Ihrer Frage angegebenen Gründen unterbrochen werden soll .
Spektren