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.

Achini Pumika
quelle

Antworten:

1

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

find -name . 'name*' -exec rm {} \;
Gemeinschaft
quelle
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.

Paul R
quelle
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.

Dinesh Bhojvani
quelle
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 {} \;
PP
quelle
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.)

Benjamin W.
quelle
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.

Yehuda Schwartz
quelle
-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 {} \;
Diwa
quelle
Dies ist eine gute Antwort - auf eine andere Frage. Es ist keine Antwort auf diese Frage.
Scott