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
find
l'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 \;