Datei entfernen ohne zu fragen


89

Wie kann ich eine Datei entfernen, ohne den Benutzer zu fragen, ob er dem Löschen der Datei zustimmt? Ich schreibe ein Shell-Skript und verwende die rm-Funktion, aber es fragt nach "Regelmäßige Datei entfernen?" und das brauche ich wirklich nicht. Danke.


5
rm -f, yes | rmund so weiter, aber das gehört zu SU.

4
rmzeigt keine "normale Datei entfernen?" Eingabeaufforderung standardmäßig. Sie müssen einen Alias ​​für rm -ieine Funktion haben oder diese als Funktion definieren. Ich bin überrascht, dass der Alias ​​in Ihrem Skript sichtbar ist. Führen Sie das Skript aus ( ./foo.sh) oder beziehen Sie es ( . foo.shoder source foo.sh)?
— Keith Thompson

Antworten:


102

Möglicherweise haben Sie ein rmAlias ​​erstellt, rm -ium Folgendes zu versuchen:

/bin/rm -f file.log

Um Ihre Aliase zu sehen, können Sie ausführen alias.


7
Verwenden Sie alternativ command rm ...oder \rm ..., um den Alias ​​/ die Funktion zu überspringen
— Glenn Jackman

6
Es wurde argumentiert, dass es eine schlechte Idee ist , sich zu rmvoreingenommen zu fühlen rm -i. Der rmBefehl entfernt standardmäßig automatisch die angegebene Datei. Durch das Aliasing auf rm -ikönnen Sie sich angewöhnen, nicht sorgfältig zu prüfen, bevor Sie die Eingabetaste drücken. Dies hängt von der interaktiven Eingabeaufforderung ab, mit der Sie gespeichert werden. Dann geben Sie rm some-important-fileeine Umgebung ohne Alias ​​ein.
— Keith Thompson

@ Keith Das ist sehr wahr, ich persönlich nur alias rm zu rm -v
— chown

1
Wenn "rm" eine Funktion ist (anstelle eines Alias), sollte diese Antwort funktionieren. Und der Bash- unsetBefehl könnte interessant sein
— Xen2050

56

Das Force-Flag entfernt alle Eingabeaufforderungen.

rm -f {file}


2
Dies ist, was ich suche, nicht die akzeptierte Antwort.
— Gsamaras

30

Möge die Macht mit dir sein - rm -f


5
Ich habe die Antwort der Lynks bereits hochgestuft, und das ist genau das gleiche. Nur für den Sinn für Humor
— upvoting

Ich habe sowohl den Kommentar als auch die Antwort positiv bewertet, nur weil jemand tatsächlich Sinn für Humor bei SO gefunden hat ...
— Mac,

5

Innerhalb eines Shell-Skripts möchten Sie verwenden, haben rm -f <filename>aber auch die Möglichkeit, die implizite -iOption für Ihre Umgebung durch Eingabe unalias rmIhrer Shell (oder Ihres Profils) zu entfernen.


unalias rmfunktioniert nicht in CentOS? Amazon Linux?
— Suncatcher vor

5

Das yesProgramm antwortet wiederholt mit Ja auf Eingabeaufforderungen. Sie können es also in das interaktive rmProgramm einfügen, um auch den gewünschten Effekt zu erzielen.

yes | rm <filename>

Umgekehrt können Sie dies tun, wenn Sie nichts Interaktives tun möchten

yes n | <something interactive>

und das wird 'n' im Eingabestream wiederholen (effektiv keine Fragen beantworten)


Die yes nOption funktioniert bei mir nicht. Während ich es benutze yes n | rm file.txt, wird die Datei tatsächlich entfernt, obwohl die Datei richtig geschützt ist.
— iammilind

5

Wenn Sie die erforderlichen Berechtigungen zum Löschen der Datei haben und nicht dazu aufgefordert werden möchten, gehen Sie wie folgt vor (-f = force):

rm -f file

Wenn Sie keine Berechtigungen für die Datei haben, müssen Sie Folgendes verwenden:

sudo rm -f file

1
Die Option "Normale Datei entfernen?" Eingabeaufforderung impliziert, dass es sich nicht um ein Berechtigungsproblem handelt.
— Keith Thompson

4
\rm file

Backslash \umgeht Aliase.


1
"\" ist ein Backslash, was meinst du?
— Cand3r

Ja, es ist möglich, rm ohne Aliase zu verwenden, was zu unerwünschten Bestätigungsdialogen mit dem Präfix \ führt.
— Teknopaul

1

Neben der Verwendung von -fparameter können Sie alternativ auch findcommand verwenden, z

find -name file.log -delete

0

Derzeit arbeite ich an einem System, in dem die Bash-Shell die Definition des Befehls rm als Funktion in einer der globalen Konfigurationsdateien erhalten hat:

 rm  () { /bin/rm -i ${1+"$@"}; }

Daher hat keine der obigen Antworten in Bezug auf Aliase funktioniert. Um dem störenden Verhalten entgegenzuwirken, habe ich die rm-Funktion in meiner .bashrc-Datei deaktiviert

 unset -f rm

Ich hatte ein ähnliches Problem wie der Opener. Allerdings habe ich keine Antwort gefunden, die die Möglichkeit erwähnt, rmdie durch eine Shell-Funktion verborgen wird. Deshalb habe ich die Antwort hier hinzugefügt, in der Hoffnung, dass sie jemandem hilft, der sich mit der gleichen Art von Problem befasst.

Tippen /bin/rmoder die rm -fganze Zeit ist unbequem und kann (im Fall von rm -f) schlimme Konsequenzen haben .


Das mag Ihr Problem gelöst haben, aber es beantwortet die Frage nicht.
— suspectus

Funktioniert die ausgewählte Antwort nicht /bin/rm? Wenn ich eine Funktion in bash und eine ausführbare Datei mit demselben Namen im aktuellen Verzeichnis habe, wird beim Hinzufügen ./vor dem Namen die Datei aufgerufen - nicht die Funktion. PS - Ich fügte einen Kommentar zu der ausgewählten Antwort über eine Funktion &unset
— Xen2050

Ja /bin/rmfunktioniert Wenn Sie dies tun, unsetmüssen Sie nicht mehr den vollständigen Pfad eingeben.
— 25.

0

Wenn Ihr rmAlias ​​ist rm -i, dann verwenden Sie unalias rm;

Verwenden rm -fSie diese Option nur, wenn Sie wirklich viele schreibgeschützte Dateien entfernen möchten. Es muss einen sehr guten Grund dafür geben -f.

Wenn Sie jedoch viele schreibgeschützte Dateien haben, bevorzugen Sie möglicherweise rsync -r --delete empty/ removed_dir/eine schnellere Geschwindigkeit.


0

Am liebsten benutze ich dazu einfach den commandBefehl in bash, genauso wie Sie sudo. Dadurch wird Ihr Befehl ohne Aliase ausgeführt, genau wie durch Ausführen von /bin/rm(wahrscheinlich rmmit Alias ​​als rm -i).

Beispiel:

command rm -f /tmp/file.txt

0
rm -Rf <folder-to-be-deleted>

-R: Rekursives f: erzwingen, keine Aufforderung

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.