La página del manual (o el manual GNU en línea ) explica prácticamente todo.
buscar comando -exec {} \;
Para cada resultado, command {}
se ejecuta. Todas las apariciones de {}
son reemplazadas por el nombre del archivo. ;
tiene como prefijo una barra inclinada para evitar que el shell lo interprete.
buscar comando -exec {} +
Cada resultado se agrega command
y se ejecuta posteriormente. Teniendo en cuenta las limitaciones de longitud del comando, supongo que este comando se puede ejecutar más veces, con la página del manual apoyándome:
el número total de invocaciones del comando será mucho menor que el número de archivos coincidentes.
Tenga en cuenta esta cita de la página del manual:
La línea de comando está construida de la misma manera que xargs construye sus líneas de comando
Es por eso que no se permiten caracteres entre {}
y +
excepto espacios en blanco. +
hace que find detecte que los argumentos deben agregarse al comando como xargs
.
La solución
Afortunadamente, la implementación de GNU de mv
puede aceptar el directorio de destino como argumento, con -t
el parámetro más largo o con uno --target
. Su uso será:
mv -t target file1 file2 ...
Tu find
comando se convierte en:
find . -type f -iname '*.cpp' -exec mv -t ./test/ {} \+
Desde la página del manual:
comando -exec;
Ejecutar comando; Es verdadero si se devuelve el estado 0. Todos los siguientes argumentos para encontrar se toman como argumentos del comando hasta que un argumento que consta de ';' se encuentra. La cadena `{} 'se reemplaza por el nombre del archivo actual que se procesa en todos los lugares donde aparece en los argumentos del comando, no solo en los argumentos donde está solo, como en algunas versiones de find. Es posible que sea necesario escapar de estas dos construcciones (con un `\ ') o entre comillas para protegerlas de la expansión del shell. Consulte la sección EJEMPLOS para ver ejemplos del uso de la opción -exec. El comando especificado se ejecuta una vez para cada archivo coincidente. El comando se ejecuta en el directorio de inicio. Hay problemas de seguridad inevitables en torno al uso de la acción -exec; debería utilizar la opción -execdir en su lugar.
-exec comando {} +
Esta variante de la acción -exec ejecuta el comando especificado en los archivos seleccionados, pero la línea de comando se construye agregando cada nombre de archivo seleccionado al final; el número total de invocaciones del comando será mucho menor que el número de archivos coincidentes. La línea de comando se construye de la misma manera que xargs construye sus líneas de comando. Solo se permite una instancia de "{}" dentro del comando. El comando se ejecuta en el directorio de inicio.