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,
-iname
toma un globo, no una expresión regular