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.

Hallo
quelle
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.

chown
quelle
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}

Lynks
quelle
2
Dies ist, was ich suche, nicht die akzeptierte Antwort.
Gsamaras
30

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

manojlds
quelle
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.

Musannif Zahir
quelle
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)

mholm815
quelle
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
Kassym Dorsel
quelle
1
Die Option "Normale Datei entfernen?" Eingabeaufforderung impliziert, dass es sich nicht um ein Berechtigungsproblem handelt.
Keith Thompson
4
\rm file

Backslash \umgeht Aliase.

teknopaul
quelle
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
Kenorb
quelle
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 .

Morgengrauen
quelle
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.

Zhu Jinxuan
quelle
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
PatrykMilewski
quelle
0
rm -Rf <folder-to-be-deleted>

-R: Rekursives f: erzwingen, keine Aufforderung

mdivk
quelle