Comment supprimer tous les fichiers portant un nom donné dans tous les sous-répertoires?

25

Je souhaite supprimer tous les fichiers portant un nom donné dans tous les sous-répertoires de mon répertoire personnel.

J'ai essayé:

rm -r file

dans mon répertoire personnel, mais cela n'a pas fonctionné car ce fichier n'existe pas dans ce répertoire.

oadams
la source

Réponses:

36

find . -name "filename" -delete

tante
la source
12

en guise d'élaboration de la réponse de @ tante, vous pouvez vous assurer que la liste de fichiers utilisée est correcte avant de supprimer ces fichiers:

find <source_dir> -name <filename> -print

si l'inspection montre une liste valide,

find <source_dir> -name <filename> -delete

une autre option si vous le souhaitez sur plusieurs répertoires en utilisant un répertoire temporaire:

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>

Comme toujours, assurez-vous de l'exactitude de tous les scripts avant l'exécution et ayez toujours une sauvegarde prête en cas de problème.

Wayne
la source
3
placez toujours des guillemets autour des substitutions de variables, sinon votre commande ne fonctionnera pas avec les noms de fichiers contenant certains caractères spéciaux (espaces, caractères génériques et barres obliques inverses).
Gilles 'SO- arrête d'être méchant'
@Gilles - Oui, merci d'avoir mis à jour et de vous assurer que cette réponse était correcte.
Wayne