En mi sistema macOS, tengo una carpeta con más de 7000 imágenes y necesito eliminar las imágenes que tienen un guión en el nombre del archivo. Probé los siguientes comandos sin obtener respuesta después de cd
ingresar al directorio (soy nuevo en la terminal):
rm -rf -- -
$ rm ./-
find . -type f -regex '/-/' -exec rm {} \;
find . -name '-*' | xargs rm
find . -regex '/-/' -print0 | xargs -0 rm
Respuesta1
El patrón *-*
coincidirá con cualquier nombre en el directorio actual quecontiene un guión(literalmente "un nombre que contiene al menos un -
, posiblemente prefijado y/o sufijado por alguna otra cadena"). Esto significa que deberías poder hacer
rm ./*-*
o
rm -- *-*
para eliminar todos los archivos con nombres que contengan un -
carácter en el directorio actual.
En el zsh
shell, usarlo *-*(.)
como patrón restringiría la coincidencia solo a archivos normales (no a directorios, aunque rm
de todos modos no se podrían eliminar directorios).
Si son demasiados archivos para rm
manejarlos de una sola vez, utilícelos find
así:
find . -maxdepth 1 -type f -name '*-*' -delete
Lo estoy usando -maxdepth 1
para restringir la búsqueda solo al directorio actual y agregué -type f
para eliminar solo archivos normales.
También puedes usar un bucle (algo lento):
for name in ./*-*; do
rm "$name"
done
Algunas personas prefieren las "frases ingeniosas", y este bucle podría escribirse como
for name in ./*-*; do rm "$name"; done
... aunque escribirlo como un comando de varias líneas definitivamente sería posible en la mayoría de los shells modernos.