Pagina 1 di 1

[Risolto] aiuto per comando terminale di copia ricorsiva

Inviato: sabato 27 settembre 2008, 21:59
da Marly
domanda niubba:

esiste un comando che copia ricorsivamente tutti i file con una certa estensione presenti in una directory e in tutte le sue figlie?

ho pensato a qualcosa del tipo cp -r *.estensione destinazione, ma prende solo i file nella cartella genitore, e non scende nelle sottodirectory.

Re: aiuto per comando terminale di copia ricorsiva

Inviato: sabato 27 settembre 2008, 22:25
da eNry92
mi sono perso alla figlia  ::) ::)
ps
bell'avatar  ;D

Re: aiuto per comando terminale di copia ricorsiva

Inviato: sabato 27 settembre 2008, 22:33
da Marly
OK provo a rispiegare

Parto da una cartella madre (es la home), e voglio copiare tutte le immagini contenute in questa ed in tutte le sue sottocartelle (quindi file con estensione jpg).

Usando cp -r si ottiene un effetto simile, nel senso che copia tutto l'albero delle directory a partire da quella indicata. Se però specifico un formato (es cp -r *.jpg) si ferma alla cartella madre, senza entrare nelle sottocartelle.

Re: aiuto per comando terminale di copia ricorsiva

Inviato: sabato 27 settembre 2008, 23:11
da Re.in.stallo
prova così (cambiando le directory e l'estensione se necessario, facendo attenzione a lasciare lo \; alla fine):

Codice: Seleziona tutto

find /cartella/di/partenza -name "*.jpg" -exec cp '{}' /cartella/di/destinazione \;
Saluti, ;)
Gabriele

Re: aiuto per comando terminale di copia ricorsiva

Inviato: domenica 28 settembre 2008, 0:14
da Marly
Fantastico, funziona!  :D

Grazie mille

PS:
avresti solo voglia di spiegarmi la sintassi della seconda parte del comando? (da -exec per intederci)

Non capisco le graffe, servono per prendere l'output del comando precedente?

Re: aiuto per comando terminale di copia ricorsiva

Inviato: domenica 28 settembre 2008, 14:42
da Re.in.stallo
Marly ha scritto: Non capisco le graffe, servono per prendere l'output del comando precedente?
-exec è un'opzione di find che ti permette di eseguire un dato comando ogni volta che trova un file (che risponda ai requisiti della ricerca). Nel tuo caso il comando è cp. Le graffe servono per passare, di volta in volta, a questo secondo comando il nome del file "trovato" da find:
man find ha scritto:       -exec command ;
              Execute  command;  true  if 0 status is returned.  All following
              arguments to find are taken to be arguments to the command until
              an  argument  consisting of ‘;’ is encountered.  The string ‘{}’
              is replaced by the current file name being processed  everywhere
              it occurs in the arguments to the command, not just in arguments
              where it is alone, as in some versions of find.  Both  of  these
              constructions might need to be escaped (with a ‘\’) or quoted to
              protect them from expansion by the shell.  See the EXAMPLES sec‐
              tion  for examples of the use of the ‘-exec’ option.  The speci‐
              fied command is run once for each matched file.  The command  is
              executed  in  the  starting  directory.    There are unavoidable
              security problems surrounding  use  of  the  -exec  option;  you
              should use the -execdir option instead.
Saluti, ;)
Gabriele

Re: [Risolto] aiuto per comando terminale di copia ricorsiva

Inviato: domenica 28 settembre 2008, 15:28
da Marly
Grazie mille!