Estoy tratando de hacer find imprima una lista de directorios que contienen archivos que no sean imágenes jpg, pero creo que mi uso de -exec la opción está rota. Mi entorno es Cygwin Bash.
$ find ! -iname "*.JPG$" -exec dirname
find: missing argument to `-exec'
$ find ! -iname "*.JPG$" -exec dirname {}
find: missing argument to `-exec'
$ find ! -iname "*.JPG$" -exec dirname ;
find: missing argument to `-exec'
$ find ! -iname "*.JPG$" -exec dirname ;
find: missing argument to `-exec'
$ find ! -iname "*.JPG$" -exec dirname {};
find: missing argument to `-exec'
Respuesta aceptada:
Un -exec debe terminar con un ; o un + . El ; hace que el comando se ejecute una vez por nombre de archivo encontrado, mientras que + hace que el comando se ejecute una vez para todos los nombres de archivo.
Aquí hay un ejemplo práctico:
find ! -iname "*.JPG" -exec dirname {} ;
Algunas diferencias notables de sus intentos:
- Debe haber un espacio entre
{}y; - El
;debe escaparse, porque es un metacarácter de shell. - Como señaló @muru en su respuesta,
-inametoma un globo, no una expresión regular