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
find
commande. Il recherchera les fichiers dans le répertoire courant,.
. -
-maxdepth 1
Par défaut,
find
recherche récursivement dans les sous-répertoires. Cela lui dit de ne pas le faire. Avec-maxdepth 1
, la commandefind
ne 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
.mp3
extension. -
-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.
-
-delete
Cela 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