Ich möchte eine Befehlszeile ausführen:
cd ~/www/tmp/; rm -P 2*
Ich erhalte jedoch eine Fehlermeldung, wenn keine Dateien mit 2 beginnen.
Sie würden denken, ich würde jedoch verwenden wollen -f
:
-f Attempt to remove the files without prompting for confirmation, regardless of the file's permissions. If the file does not exist, do not display a diagnostic message or modify the exit status to reflect an error.
Und ich kümmere mich um Dateiberechtigungen - wenn etwas Seltsames vor sich geht, würde ich den Befehl abbrechen vorziehen. Ich möchte nur Fehler unterdrücken, die nicht existieren.
Ich habe mir einige andere Fragen mit 'rm-Fehlern' angesehen und diese beiden gefunden, die (irgendwie) relevant erscheinen:
Löschen Sie Dateien und Verzeichnisse anhand ihrer Namen. Datei oder Verzeichnis existiert nicht
Aber ich verstehe nicht alles, was in den Antworten auf diese Frage vor sich geht, und weiß nicht, dass ich es brauche?
Der touch
in dieser Frage vorgeschlagene Hack:
Haben Sie nicht gemeldet, wenn eine Datei fehlt?
Scheint praktikabel zu sein, da ich nicht denke, dass mir der Leistungstreffer etwas ausmacht (aber welche Art von Leistungstreffer würden Sie nehmen? - dh: Ist dies eine einigermaßen skalierbare Technik oder lerne ich nur sehr schlechte Gewohnheiten?)
Ich bin mir nicht sicher, wie ich eine if-then
innerhalb der Kommandozeile machen würde.
Gibt es andere Optionen für eine einfache Bereinigung durch Ausschneiden und Einfügen in der Befehlszeile?
Würde find -delete
für meinen Fall besser funktionieren? Wenn ja warum?
Fehler in Frage:
rm: 2*: No such file or directory
quelle
rm
, also müssen Sie sagen, was das ist.zsh
als interaktive Shell? Erhalten Sie einenNo matches found
Fehler?2*
rm übergeben, anstatt sie auf eine Liste von Dateien zu erweitern. Schauen Sie sich den fraglichen Fehler an: Es heißt, dass sich rm beschwert, nicht sh / bas / zsh / ...Antworten:
So ruft nur
rm -P
für bestehende reguläre Datei , deren Namen ein Muster in einem Verzeichnis (aber nicht unten):Z.B,
Verwenden Sie
! -type d
anstelle von nur Nicht-Verzeichnisse anstelle von-type f
. Der Unterschied besteht darin,! -type d
dass dies für eine größere Auswahl von Dateitypen gilt (symbolische Links, Named Pipes, Sockets usw.).Da Sie für einige Bedingungen für die Dateien gefunden aufgefordert werden möchten, sollten Sie nicht verwenden ,
-delete
anstatt-exec rm
wie da das funktioniertrm -f
.Entfernen
-maxdepth 1
, umfind
rekursiv in Unterverzeichnissen suchen zu lassen .quelle
! -type d
könnte näher seinrm 2*
, denke ich?find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +
-P
.-type f
, wusste aber nicht, wie ich mich so verhalten sollrm
- also war @ Kusalanadas Vorschlag genau richtig und die Differenzierung / Erklärung ist großartig zum Lernen.rm 2*(.)
in zsh).