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

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!
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!