Devi usare cp -t /home/shantanu/tosend per dirgli che l'argomento è la directory di destinazione e non una fonte. Puoi quindi cambiarlo in -exec ... + per ottenere cp per copiare quanti più file possibile contemporaneamente.
Se il tuo intento è copiare i file trovati in /home/shantanu/tosend , hai l'ordine degli argomenti in cp invertito:
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp "{}" /home/shantanu/tosend \;
Per favore, nota:il find comando usa {} come segnaposto per il file corrispondente.
ho riscontrato un problema simile a questo...
In realtà, puoi elaborare find in due modi output del comando in copy comando
-
Se
findl'output del comando non contiene spazi, ad esempio se il nome del file non contiene spazi, puoi utilizzare il comando indicato di seguito:Sintassi:
find <Path> <Conditions> | xargs cp -t <copy file path>Esempio:
find -mtime -1 -type f | xargs cp -t inner/ -
Ma la maggior parte delle volte i nostri file di dati di produzione potrebbero contenere spazio al suo interno. Quindi la maggior parte delle volte il comando sotto menzionato è più sicuro:
Sintassi:
find <path> <condition> -exec cp '{}' <copy path> \;Esempio
find -mtime -1 -type f -exec cp '{}' inner/ \;
Nel secondo esempio, anche l'ultima parte, cioè il punto e virgola, è considerata come parte di find comando, che dovrebbe essere sfuggito prima di premere il pulsante Invio. Altrimenti otterrai un errore simile a questo
find: missing argument to `-exec'
Nel tuo caso, la sintassi del comando di copia è errata per copiare find file in /home/shantanu/tosend . Il seguente comando funzionerà:
find /home/shantanu/processed/ -name '*2011*.xml' -exec cp {} /home/shantanu/tosend \;