2011-03-09 16 views
77

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

# 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' 

Respuesta

192

Si su intención es copiar los archivos que se encuentran en/home/shantanu/tosend usted tiene la orden de los argumentos a cp invertido:

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

Nota: encontrar uso de comandos {} como marcador de posición para el archivo coincidente

+3

¿Cuál es el propósito de '\; '? – Astrid

+2

@Astrid check [this] (http://unix.stackexchange.com/questions/12902/how-to-run-find-exec) – shellbye

+0

Ahh Veo @shellbye - gracias – Astrid

6

Debe usar cp -t /home/shantanu/tosend para indicarle que el argumento es el directorio de destino y no una fuente. Puede cambiarlo a -exec ... + para obtener cp y copiar tantos archivos como sea posible a la vez.

+2

En Linux tenía que especificar el directorio de destino como lo siguiente: 'find/home/shantanu/processed/-name '* 2011 * .xml' -exec cp --target-directory =/home/shantanu/tosend { } \; ' – GuruM

+0

+1 para su respuesta útil @Ignacio Vazquez-Abrams – GuruM

+3

Esta respuesta podría mejorarse y acortarse si se proporcionó el comando completo como en la respuesta superior. – Brian

22

me enfrentaba a un problema algo como esto ...

En realidad, en dos formas en que puede procesar la salida find mando en copy comando

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

    Sintaxis: find <Path> <Conditions> | xargs cp -t <copy file path>

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

  2. Pero la mayoría de las veces nuestros archivos de datos de producción puede contener espacio en él. Así que la mayoría de tiempo por debajo mencionado comando 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, semi-colon también se considera como parte de find comando, debe escaparse antes de presionar el botón enter. De lo contrario obtendrá un error como este algo

find: missing argument to `-exec' 

En su caso, copia sintaxis del comando es incorrecta con el fin de copiar encontrar el archivo en /home/shantanu/tosend. El siguiente comando funcionará:

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

3. Si tiene GNU 'find' /' xargs', 'find -print0 | xargs -0 -r cp -t '. Ejemplo: 'find -mtime -1 -type f -print0 | xargs -r0 cp -t inner/' –

-2

La razón de que el error es que usted está tratando de copiar una carpeta que requiere opción -r también a Cp Gracias

+3

Hola, como la pregunta ya está respondida (desde hace un tiempo) esta no es realmente una respuesta relevante, también debe ser un comentario (cuando tengas más representantes), a menos que desees para expandir y explicarlo. Solo un aviso :). – W1ll1amvl

Cuestiones relacionadas