J'ai un répertoire avec un tas d'extensions de fichiers mélangées et je voudrais lister une extension de fichier spécifique (peut-être quelque chose comme grep *.mp3 ) et lors de la liste, supprimez-les avec une sortie. Comment puis-je faire cela ou s'il y a un dupe, n'hésitez pas à me taguer.
Exemple :
grep "*.mp3" . | rm -fr
Réponse acceptée :
Commençons par un répertoire avec trois mp3 fichiers :
$ ls *mp3
a.mp3 b.mp3 c.mp3
Maintenant, supprimons-les après avoir listé ce que nous supprimons :
$ find . -maxdepth 1 -name '*.mp3' -printf 'Deleting %p\n' -delete
Deleting ./a.mp3
Deleting ./b.mp3
Deleting ./c.mp3
Après cela, le mp3 les fichiers ont disparu :
$ ls *mp3
ls: cannot access '*mp3': No such file or directory
Comment ça marche
-
`trouver .
Cela lance une
findcommande. Il recherchera les fichiers dans le répertoire courant,.. -
-maxdepth 1Par défaut,
findrecherche récursivement dans les sous-répertoires. Cela lui dit de ne pas le faire. Avec-maxdepth 1, la commandefindne regardera que ce qu'il trouve dans le répertoire courant et n'explorera aucun des sous-répertoires du répertoire courant. -
-name '*.mp3'Cela indique à find de rechercher uniquement les fichiers avec le
.mp3extension. -
-printf 'Deleting %p\n'Cela indique à find d'imprimer un message sur chaque fichier trouvé.
Vous pouvez, bien sûr, changer cela en un autre message si vous le souhaitez. Si vous ne voulez pas de message, cette option peut être complètement omise.
-
-deleteCela indique à find de supprimer chaque fichier.
Recherche insensible à la casse
Si vous souhaitez également rechercher des fichiers nommés .MP3 ou .Mp3 etc., alors nous avons besoin d'une recherche insensible à la casse et nous utilisons -iname :
find . -maxdepth 1 -iname '*.mp3' -printf 'Deleting %p\n' -delete