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.
89
rm -f
,yes | rm
und so weiter, aber das gehört zu SU.rm
zeigt keine "normale Datei entfernen?" Eingabeaufforderung standardmäßig. Sie müssen einen Alias fürrm -i
eine 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.sh
odersource foo.sh
)?Antworten:
Möglicherweise haben Sie ein
rm
Alias erstellt,rm -i
um Folgendes zu versuchen:Um Ihre Aliase zu sehen, können Sie ausführen
alias
.quelle
command rm ...
oder\rm ...
, um den Alias / die Funktion zu überspringenrm
voreingenommen zu fühlenrm -i
. Derrm
Befehl entfernt standardmäßig automatisch die angegebene Datei. Durch das Aliasing aufrm -i
kö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 Sierm some-important-file
eine Umgebung ohne Alias ein.unset
Befehl könnte interessant seinDas Force-Flag entfernt alle Eingabeaufforderungen.
rm -f {file}
quelle
Möge die Macht mit dir sein -
rm -f
quelle
Innerhalb eines Shell-Skripts möchten Sie verwenden, haben
rm -f <filename>
aber auch die Möglichkeit, die implizite-i
Option für Ihre Umgebung durch Eingabeunalias rm
Ihrer Shell (oder Ihres Profils) zu entfernen.quelle
unalias rm
funktioniert nicht in CentOS? Amazon Linux?Das
yes
Programm antwortet wiederholt mit Ja auf Eingabeaufforderungen. Sie können es also in das interaktiverm
Programm einfügen, um auch den gewünschten Effekt zu erzielen.Umgekehrt können Sie dies tun, wenn Sie nichts Interaktives tun möchten
und das wird 'n' im Eingabestream wiederholen (effektiv keine Fragen beantworten)
quelle
yes n
Option funktioniert bei mir nicht. Während ich es benutzeyes n | rm file.txt
, wird die Datei tatsächlich entfernt, obwohl die Datei richtig geschützt ist.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):
Wenn Sie keine Berechtigungen für die Datei haben, müssen Sie Folgendes verwenden:
quelle
Backslash
\
umgeht Aliase.quelle
Neben der Verwendung von
-f
parameter können Sie alternativ auchfind
command verwenden, zquelle
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:
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
Ich hatte ein ähnliches Problem wie der Opener. Allerdings habe ich keine Antwort gefunden, die die Möglichkeit erwähnt,
rm
die 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/rm
oder dierm -f
ganze Zeit ist unbequem und kann (im Fall vonrm -f
) schlimme Konsequenzen haben .quelle
/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
/bin/rm
funktioniert Wenn Sie dies tun,unset
müssen Sie nicht mehr den vollständigen Pfad eingeben.Wenn Ihr
rm
Alias istrm -i
, dann verwenden Sieunalias rm
;Verwenden
rm -f
Sie 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.quelle
Am liebsten benutze ich dazu einfach den
command
Befehl in bash, genauso wie Siesudo
. Dadurch wird Ihr Befehl ohne Aliase ausgeführt, genau wie durch Ausführen von/bin/rm
(wahrscheinlichrm
mit Alias alsrm -i
).Beispiel:
quelle
quelle