Wie entferne ich alle Dateien, die einem Muster entsprechen?

76

Wenn ich in Mercurial zurückkehre, verbleiben mehrere .origDateien. Ich möchte in der Lage sein, einen Befehl auszuführen, um alle zu entfernen.

Ich habe einige Quellen gefunden, die sagen:

rm **/*.orig

Aber das gibt mir die Nachricht:

rm: kann `* / .orig ' nicht entfernen : Keine solche Datei oder kein solches Verzeichnis

Ich habe auch versucht:

  • rm -rv *.orig

  • rm -R *\.orig

JD Isaacks
quelle
Werfen Sie einen Blick auf superuser.com/a/699287/92334
Lu55

Antworten:

148

Verwenden Sie den findBefehl (mit Vorsicht!)

find . -name '*.orig' #-delete

Ich habe den Löschbefehl auskommentiert, aber wenn Sie mit der Übereinstimmung zufrieden sind, entfernen Sie einfach den Befehl #aus der Zeile und es sollten alle diese Dateien gelöscht werden.

Oli
quelle
Funktioniert das rekursiv?
Frank Barcenas
2
@FrankBarcenas Ja - find macht alles rekursiv. Wenn Sie die Funktionsweise einschränken möchten, können Sie mit den Argumenten -maxdepthoder spielen -mindepth.
Oli
6
Lassen Sie -deleteauf jeden Fall die am Ende der Flags. find . -delete -name '*.orig'wird den Filter ignorieren und Ihr gesamtes Verzeichnis überladen.
Michael
1
@ Michael, ja. Ich habe das Problem bereits mitgit clean -fdx
kyb 10.08.18
1
@kamal Ich würde wahrscheinlich immer noch find verwenden, aber mit -regexoder -iregexPrädikaten. Das Parsen von Dateinamen (wenn Sie sie weiterleiten) kann manchmal schwierig sein.
Oli
6

"find" verfügt über einige sehr fortschrittliche Techniken zum Durchsuchen aller oder aktueller Verzeichnisse und rm-Dateien.

find ./ -name ".orig" -exec rm -rf {} \;
user2038042
quelle
3
Was ist der Vorteil gegenüber der Verwendung -delete?
muru
@muru Ich nehme an, Sie würden eine Eingabeaufforderung für jede Datei erhalten, wenn Sie -rf entfernen.
Peter
@ Peter nicht unbedingt. Sogar dann so? Die Antwort verwendet -rfund findhat -ok.
Muru
@muru es sieht aus wie -delete nicht Ordner entfernen
Andrii Karaivanskyi
@AndriiKaraivanskyi es sei denn, das Löschen ist fehlgeschlagen, tut es.
muru
1

Ich habe alle Dateien entfernt, die so mit .nfs000000000 beginnen

rm .nfs000000000*
Taras Vaskiv
quelle