Ich suche nach einer Lösung als Antwort auf "rm: schreibgeschützte reguläre Datei entfernen [x]?"
Ich habe darüber nachgedacht, in bashrc eine Figur zu veröffentlichen, der mehrere Male ein Wagenrücklauf folgt. Wie machen wir das?
Ich suche nach einer Lösung als Antwort auf "rm: schreibgeschützte reguläre Datei entfernen [x]?"
Ich habe darüber nachgedacht, in bashrc eine Figur zu veröffentlichen, der mehrere Male ein Wagenrücklauf folgt. Wie machen wir das?
Antworten:
Bearbeiten basierend auf aktualisierter Frage:
Fügen Sie die -f
Option ("force") hinzu, um zu vermeiden, dass Sie zum Entfernen von Dateien aufgefordert werden :
rm -f /path/to/file
Dies hat einen Nebeneffekt, den Sie beachten sollten: Wenn einer der angegebenen Pfade nicht vorhanden ist, wird dies nicht gemeldet und es wird erfolgreich zurückgegeben:
$ rm -f /nonexistent/path
$ echo $?
0
Ursprüngliche Antwort:
Hier ist eine einfache Lösung:
yes "$string" | head -n $number | tr $'\n' $'\r'
yes
Wiederholt jede Zeichenfolge, die Sie eingeben, unendlich, durch Zeilenumbrüche getrennt. head
stoppt es nach einiger $number
Zeit und tr
übersetzt die Zeilenumbrüche in Zeilenumbrüche. Möglicherweise wird aufgrund der Wagenrückläufe keine Ausgabe angezeigt, die Übergabe an diesen Befehl (in bash
) sollte dies jedoch veranschaulichen:
printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"
Benutzer ohne bash
Dosenrohr das Ergebnis od
, hexdump
oder xxd
die tatsächlichen Zeichen zurückgegeben , um zu sehen.
Das andere Problem, auf das ich von Zeit zu Zeit rm
gestoßen bin, ist rm -i
das folgende:
alias rm='rm -i'
In diesem Fall können Sie entweder unalias rm
oder Sie können diesen Trick, den ich vor Jahren herausgefunden habe, verwenden, indem Sie einen Backslash vor einen Befehl setzen, der mit einem Alias versehen wurde, um den Alias nur einmal zu ignorieren. Beispiel:
\rm somefile
Sie können mehr über Aliase in einem Artikel bei Nixcraft erfahren .
rm
ist fest codiert, um "interaktiv" (Eingabeaufforderung wartet auf Benutzereingabe) nach schreibgeschützten Dateien zu fragen. Es gibt zwei Methoden, um zu verhindern, dass rm
gefragt wird:
rm -rf somedir
und
rm -r --interactive=never somedir
(beide funktionieren auch ohne -r
beim löschen von dateien statt dirs)
Erläuterung:
-f
bewirkt rm
, dass "nicht vorhandene Dateien und Argumente ignoriert werden, niemals aufgefordert wird".
--interactive=never
tut was es sagt: Sei niemals interaktiv. mit anderen worten: nie auffordern.
Der Unterschied zwischen -f
und --interactive=never
ist dieser Teil: "Ignoriere nicht vorhandene Dateien und Argumente".
vergleichen Sie:
$ rm -rf nonexistingname
$ echo $?
0
und
$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1
Der Unterschied ist vor allem dann interessant, wenn Sie Skripte schreiben, bei denen Sie nie rm
interaktiv sein möchten, aber dennoch Fehler behandeln möchten.
Zusammenfassung: In der Befehlszeile verwenden rm -rf
. in Skripten verwenden rm -r --interactive=never
.
Eine Antwort auf die angegebene Frage ("Wie Sie vermeiden, dass beim Entfernen einer geschützten Datei mehrmals ein" y "ausgegeben werden muss") finden Sie unter https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line / 338860 # 338860
Ich bin auch auf dasselbe Problem gestoßen. Die obige Antwort gilt nur für eine Datei, aber wenn Sie viele Ja ignorieren möchten.
Sie können verwenden
sudo rm -r /path/to/directory
um alle schreibgeschützten regulären Dateien zu entfernen