Wie lösche ich alle Dateien mit einem bestimmten Namen in allen Unterverzeichnissen?

25

Ich möchte alle Dateien mit einem bestimmten Namen in allen Unterverzeichnissen meines Home-Verzeichnisses löschen.

Ich habe es versucht:

rm -r file

in meinem Heimatverzeichnis, aber es hat nicht funktioniert, weil diese Datei in diesem Verzeichnis nicht existiert.

oadams
quelle

Antworten:

36

find . -name "filename" -delete

tante
quelle
12

Um die Antwort von @ tante zu erläutern, möchten Sie möglicherweise sicherstellen, dass die verwendete Dateiliste korrekt ist, bevor Sie diese Dateien löschen:

find <source_dir> -name <filename> -print

Wenn die Inspektion eine gültige Liste ergibt, dann

find <source_dir> -name <filename> -delete

eine andere Option, wenn dies über viele Verzeichnisse unter Verwendung eines temporären Halteverzeichnisses erfolgen soll:

mkdir <dest_dir>
for i in <list_of_directories>
do
  find "$i" -name <filename> -exec /bin/mv {} <dest_dir>
done

# check dest_dir
ls dest_dir
rm -rf <dest_dir>

Stellen Sie wie immer sicher, dass alle Skripte korrekt sind, bevor Sie sie ausführen, und halten Sie immer ein Backup bereit, falls etwas schief geht.

Wayne
quelle
3
Setzen Sie Variablenersetzungen immer in doppelte Anführungszeichen, sonst funktioniert Ihr Befehl nicht mit Dateinamen, die bestimmte Sonderzeichen enthalten (Leerzeichen, Platzhalter und umgekehrte Schrägstriche).
Gilles 'SO- hör auf, böse zu sein'
@Gilles - Ja, danke für die Aktualisierung und die Richtigkeit dieser Antwort.
Wayne