eliminar archivos que coinciden con el patrón


32

Necesito eliminar recursivamente todos los archivos en todos los subdirectorios donde el nombre de archivo contiene un número seguido de una 'x' seguida de un número, al menos dos veces.

Ejemplo:

Me gustaría eliminar estos archivos:

'aaa-12x123-123x12.jpg'
'aaa-12x12-123x12-12x123.jpg'

Pero NO quiero eliminar estos archivos:

'aaa.jpg'
'aaa-12x12.jpg'
'aaaxaaa-123x123.jpg'
'aaaxaaa-aaaxaaa.jpg'

¿Cómo puedo hacer eso (desde el shell bash)

Respuestas:


61

Una cadena contiene "un número seguido de un xseguido de un número" si y solo si contiene un dígito seguido de un xseguido de un dígito, es decir, si contiene una subcadena que coincida con el patrón [0-9]x[0-9]. Entonces está buscando eliminar los archivos cuyo nombre coincide con el patrón *[0-9]x[0-9]*[0-9]x[0-9]*.jpg.

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -delete

Si findno tiene -delete, llame rmpara eliminar los archivos.

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -exec rm {} +

2
¡Gracias! 12,000 archivos desaparecidos i 2 seg. ¡Eso me ahorró algo de trabajo manual!
mikkelbreum

Ni -deletetampoco -exec rmtrabajado para mí en Bash en Windows. Pero esto hizo:find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' | xargs rm
Tamlyn

2
@Tamlyn Use -print0y xargs -0, de lo contrario, el comando fallará con los nombres de archivo que contienen espacios o comillas simples. Sin embargo, -deletey -exec rm hacer el trabajo en Windows. Si algo no funciona, no se debe a su uso.
Gilles 'SO- deja de ser malvado'

¿Funcionará esto también con Windows?
CodyBugstein

Funcionará si tiene un puerto de utilidades Unix como Cygwin o GNUWin32. Obviamente no funcionará de fábrica en Windows. Tenga cuidado de que Windows tenga un programa no relacionado llamado find, así que asegúrese de que las utilidades de Unix sean las primeras PATH.
Gilles 'SO- deja de ser malvado'

0

El comando correcto es:

find . -type f -iregex '.*[0-9]x[0-9]*\.jpg$'

esto tomará solo archivos con nombres: 'aaa-12x12.jpg', pero no 'aaa-12x12red.jpg'

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.