2013-08-20 1 views
30

Mi piacerebbe trovare tutti i file pdf in una cartella. Contiene i file pdf e più directory che contengono più. La cartella si trova su un server remoto a cui ho accesso SSH. Sto usando il terminale mac ma credo che il server a cui mi sto collegando sia Centos.Come trovare i file in modo ricorsivo per tipo di file e copiarli in una directory mentre ci si trova in ssh?

Devo trovare tutti i file PDF e copiarli tutti in una directory sul server remoto. Ho provato circa 10 variazioni senza fortuna. Sia la mia che i sistemi remoti non sembrano riconoscere -exec come un comando, sebbene exec sia perfetto quindi questo è un problema.

Non sono sicuro di quale sia il problema, ma il comando non ha esito negativo si trova solo lì e si blocca per sempre, quindi non ho errori da pubblicare.

cp $(find -name "*.pdf" -type f; exec ./pdfsfolder {} \; | sed 1q) 

find: ./tcs/u25: Permission denied 
find: ./tcs/u68: Permission denied 
-bash: /var/www/html/tcs_dev/sites/default/files/pdfsfolder: is a directory 
-bash: exec: /var/www/html/tcs_dev/sites/default/files/pdfsfolder: cannot execute: Success 
cp: target `./runaways_parents_guide_2013_final.pdf' is not a directory 

Questo è l'ultimo che ho provato, credo di poter ignorare il permesso negato errori per ora, ma non sono sicuro circa il resto.

risposta

95

Prova questa:

find . -name "*.pdf" -type f -exec cp {} ./pdfsfolder \; 
+0

Grazie, si è seduto lì per un po ', ma penso che potrebbe aver avuto a che fare con gli errori di autorizzazioni. – lorless

+2

Cosa fa il comando '\;' come parte del comando exec? – user3728501

+0

@ user3728501 termina l'espressione exec –

2

Qualcosa del genere dovrebbe funzionare.

ssh [email protected] 'find -type f -name "*.pdf" -exec cp {} ./pdfsfolder \;'

+1

Cosa fa il comando '\;' come parte del comando 'exec'? – user3728501

+0

@ user3728501 http://stackoverflow.com/questions/20913198/why-are-the-backslash-and-semicolon-required-with-the-find-commands-exec-optio – ptierno

1

Paul Dardeau risposta è perfetta, l'unica cosa è, che cosa se tutti i file all'interno di quelle cartelle non sono file PDF e si vuole prendere tutto, non importa l'estensione. Beh, basta cambiarlo in

find . -name "*.*" -type f -exec cp {} ./pdfsfolder \; 

Solo per riassumere!