Buscar y copiar archivos

¿Por qué lo siguiente no copia los archivos a la carpeta de destino?

# find /home/shantanu/processed/ -name '*2011*.xml' -exec cp /home/shantanu/tosend {} \; cp: omitting directory `/home/shantanu/tosend' cp: omitting directory `/home/shantanu/tosend' cp: omitting directory `/home/shantanu/tosend' 

Si su intención es copiar los archivos encontrados en / home / shantanu / tosend, tiene el orden de los argumentos para invertir cp:

 find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend \; 

Nota: encuentre el comando use {} como marcador de posición para el archivo coincidente

me enfrenté a un problema como este …

En realidad, de dos maneras puedes procesar la salida de comando de find comando de copy

  1. Si la salida de find comando no contiene ningún espacio, es decir, si el nombre del archivo no contiene espacio, puede usar el siguiente comando:

    Sintaxis: find | xargs cp -t find | xargs cp -t

    Ejemplo: find -mtime -1 -type f | xargs cp -t inner/ find -mtime -1 -type f | xargs cp -t inner/

  2. Pero la mayoría de las veces nuestros archivos de datos de producción pueden contener espacio. Entonces, la mayoría de las veces el comando mencionado más abajo es más seguro:

    Sintaxis: find -exec cp '{}' \;

    Ejemplo find -mtime -1 -type f -exec cp '{}' inner/ \;

En el segundo ejemplo, la última parte, es decir, punto y coma, también se considera parte del comando de find , que debe escaparse antes de presionar el botón de enter. De lo contrario, obtendrá un error como este

 find: missing argument to `-exec' 

En su caso, la syntax 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 \; 

Necesita usar cp -t /home/shantanu/tosend para decirle que el argumento es el directorio de destino y no una fuente. A continuación, puede cambiarlo a -exec ... + para que cp copie tantos archivos como sea posible a la vez.

El motivo de ese error es que está intentando copiar una carpeta que requiere la opción -r también para cp. Gracias.