Eliminar archivos en un directorio que tienen un guión en el nombre del archivo

Eliminar archivos en un directorio que tienen un guión en el nombre del archivo

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 cdingresar 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 zshshell, usarlo *-*(.)como patrón restringiría la coincidencia solo a archivos normales (no a directorios, aunque rmde todos modos no se podrían eliminar directorios).

Si son demasiados archivos para rmmanejarlos de una sola vez, utilícelos findasí:

find . -maxdepth 1 -type f -name '*-*' -delete

Lo estoy usando -maxdepth 1para restringir la búsqueda solo al directorio actual y agregué -type fpara 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.

información relacionada