Necesitas usar cp -t /home/shantanu/tosend
para decirle que el argumento es el directorio de destino y no una fuente. Luego puede cambiarlo a -exec ... +
para obtener cp
para copiar tantos archivos como sea posible a la vez.
Si su intención es copiar los archivos encontrados en /home/shantanu/tosend
, tienes el orden de los argumentos a cp
al revés:
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp "{}" /home/shantanu/tosend \;
Por favor, tenga en cuenta:el find
uso de comando {}
como marcador de posición para el archivo coincidente.
Me enfrenté a un problema como este...
En realidad, de dos maneras puedes procesar find
salida de comando en copy
comando
-
Si
find
la salida del comando no contiene ningún espacio, es decir, si el nombre del archivo no contiene espacio, puede usar el comando mencionado a continuación:Sintaxis:
find <Path> <Conditions> | xargs cp -t <copy file path>
Ejemplo:
find -mtime -1 -type f | xargs cp -t inner/
-
Pero la mayoría de las veces, nuestros archivos de datos de producción pueden contener espacio. Entonces, la mayor parte del tiempo, el siguiente comando mencionado es más seguro:
Sintaxis:
find <path> <condition> -exec cp '{}' <copy path> \;
Ejemplo
find -mtime -1 -type f -exec cp '{}' inner/ \;
En el segundo ejemplo, la última parte, es decir, el punto y coma también se considera parte de find
comando, que debe escaparse antes de presionar el botón enter. De lo contrario obtendrá un error como este
find: missing argument to `-exec'
En su caso, la sintaxis del comando de copia es incorrecta para copiar el archivo de búsqueda en /home/shantanu/tosend
. El siguiente comando funcionará:
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend \;