Tengo un directorio con un montón de extensiones de archivos mezcladas y me gustaría enumerar una extensión de archivo específica (tal vez algo como grep *.mp3
) y al enumerarlos, elimínelos con una salida. ¿Cómo puedo hacer eso o si hay un engaño, no dude en etiquetarme?
Ejemplo:
grep "*.mp3" . | rm -fr
Respuesta aceptada:
Comencemos con un directorio con tres mp3
archivos:
$ ls *mp3
a.mp3 b.mp3 c.mp3
Ahora, eliminémoslos después de enumerar lo que estamos eliminando:
$ find . -maxdepth 1 -name '*.mp3' -printf 'Deleting %p\n' -delete
Deleting ./a.mp3
Deleting ./b.mp3
Deleting ./c.mp3
Una vez hecho esto, el mp3
los archivos se han ido:
$ ls *mp3
ls: cannot access '*mp3': No such file or directory
Cómo funciona
-
`buscar .
Esto inicia un
find
dominio. Buscará archivos en el directorio actual,.
. -
-maxdepth 1
Por defecto,
find
busca recursivamente en subdirectorios. Esto le dice que no haga eso. Con-maxdepth 1
, el comandofind
solo mirará lo que encuentre en el directorio actual y no explorará ninguno de los subdirectorios del directorio actual. -
-name '*.mp3'
Esto le dice a find que busque solo archivos con
.mp3
extensión. -
-printf 'Deleting %p\n'
Esto le dice a find que imprima un mensaje sobre cada archivo encontrado.
Por supuesto, puede cambiar esto a otro mensaje si lo desea. Si no desea recibir un mensaje, puede omitir esta opción por completo.
-
-delete
Esto le dice a find que elimine cada archivo.
Búsqueda que no distingue entre mayúsculas y minúsculas
Si también desea buscar archivos con el nombre .MP3
o .Mp3
etc., entonces necesitamos una búsqueda que no distinga entre mayúsculas y minúsculas y usamos -iname
:
find . -maxdepth 1 -iname '*.mp3' -printf 'Deleting %p\n' -delete