Auf meinem macOS-System habe ich einen Ordner mit über 7.000 Bildern und muss die Bilder löschen, deren Dateiname einen Bindestrich enthält. Ich habe die folgenden Befehle ausprobiert, ohne eine Antwort zu erhalten, nachdem ich cd
in das Verzeichnis gegangen bin (ich bin neu im Terminal):
rm -rf -- -
$ rm ./-
find . -type f -regex '/-/' -exec rm {} \;
find . -name '-*' | xargs rm
find . -regex '/-/' -print0 | xargs -0 rm
Antwort1
Das Muster *-*
stimmt mit jedem Namen im aktuellen Verzeichnis überein, derenthält einen Bindestrich(wörtlich „ein Name, der mindestens ein enthält -
, möglicherweise mit einem Präfix und/oder Suffix einer anderen Zeichenfolge“). Das bedeutet, dass Sie Folgendes tun können sollten:
rm ./*-*
oder
rm -- *-*
um alle Dateien -
im aktuellen Verzeichnis zu löschen, deren Namen ein bestimmtes Zeichen enthalten.
In der zsh
Shell *-*(.)
würde die Verwendung als Muster die Übereinstimmung auf ausschließlich normale Dateien beschränken (keine Verzeichnisse, obwohl rm
Verzeichnisse ohnehin nicht gelöscht werden könnten).
Wenn das zu viele Dateien sind, um sie rm
auf einmal zu verarbeiten, gehen Sie find
folgendermaßen vor:
find . -maxdepth 1 -type f -name '*-*' -delete
Ich verwende es, -maxdepth 1
um die Suche auf das aktuelle Verzeichnis zu beschränken, und habe hinzugefügt, -type f
dass nur normale Dateien gelöscht werden.
Sie könnten auch eine (etwas langsame) Schleife verwenden:
for name in ./*-*; do
rm "$name"
done
Manche Leute bevorzugen "Einzeiler", und diese Schleife könnte wie folgt geschrieben werden
for name in ./*-*; do rm "$name"; done
... obwohl es in den meisten modernen Shells durchaus möglich wäre, es als mehrzeiligen Befehl einzugeben.