So entfernen Sie alle Dateien, die mit einer bestimmten Zeichenfolge beginnen, unter Linux


36

Ich muss alle Dateien finden, die mit dem Namen NAMEin einem Verzeichnisbaum beginnen, und alle diese Dateien mit einem Shell-Befehl entfernen.

Antworten:


1

um alle dateien zu löschen, deren name name hat --- können sie benutzen

find -name . 'name*' -exec rm {} \;

1
Sie können -f auch als 'rm'-Argument hinzufügen, damit Sie nicht aufgefordert werden, "Sind Sie sicher, dass Sie die X-Datei entfernen möchten?"
UtahJarhead

Welche Version von grephat einen -execSchalter?
Ben Graham

Warum hat dieser Kommentar Abwertungen?
Ultrasonic54321

64

Löschen Sie alle Dateien im aktuellen Verzeichnis und seinen Unterverzeichnissen, deren Dateiname mit "foo" beginnt:

$ find . -type f -name foo\* -exec rm {} \;

Achtung: Vorsichtig verwenden - zuerst sichern - auch zuerst trocken laufen, z

$ find . -type f -name foo\*

teilt Ihnen nur die Namen der Dateien mit, die gelöscht werden sollen.


5
Ich musste über 2 Millionen Dateien löschen und in Schwierigkeiten geraten, find . -type f -name foo\* -deletemachte den Trick
Linas

25

Ich habe versucht, auf diese Weise funktioniert es für mich unter Befehl versuchen.

rm -rf Example*

Hier ist "Beispiel" Text, der für alle Dateien gleich ist.


4
Ich
bin

@DanTheMan Es ist, weil es ~ 4 Jahre neuer ist als die anderen Antworten. Dies ist definitiv die einfachste Antwort.
Joshuakcockrell

10

Sie können verwenden find:

find . -name "name*" -exec rm {} \;

Auch anstatt '.' Sie können einen absoluten Pfad angeben.
UtahJarhead

3

Mit der globstarOption (aktivieren mit shopt -s globstar):

rm -f **/NAME*

**/Expandiert zu ./, */, */*/, */*/*/etc. Wenn Sie einen haben Verzeichnisnamen mit Start NAME, wird sich beschweren , der Befehl , dass rmVerzeichnisse nicht entfernen können, aber das ist alles.

Beachten Sie, dass dies möglicherweise zu Einschränkungen der Befehlszeilenlänge führen kann, wenn der Glob mit vielen Dateien übereinstimmt.

Alternativ können Sie mit so wenigen Aufrufen rmwie möglich, jedoch ohne Einschränkung der Befehlszeilenlänge, Folgendes ausführen:

find . -type f -name 'NAME*' -exec rm -f {} +

(Beachten Sie die +statt \;der engen -execErklärung.)


2

find . -name 'foo'* -type f -delete scheint die einfachste Antwort zu sein.

Sie können dies ohne das -deleteFlag ausführen, um zu sehen, welche Dateien gelöscht werden.


-2

Suchen Sie nach der "Inode" -Nummer der Datei / des Ordners und löschen Sie diese mit der Inode-Nummer. Unten ist ein Beispiel:

ls -il
3407873 drwxr-xr-x. 2 root   root      4096 Mar 30 07:49 p

find . -inum 3407873 -exec rm -rf {} \;

Dies ist eine gute Antwort - auf eine andere Frage. Es ist keine Antwort auf diese Frage.
Scott
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.