copiare in modo ricorsivo tutti i file da una directory all'altra con eccezioni


8

Come devo copiare tutti i file tranne un paio di directory da una directory all'altra. per esempio:

cp -R test /www/test2 would copy all

Ma voglio escludere 2 cartelle chiamate registro e registri.

Ho provato qualcosa del tipo:

find ~test -not -name logs,log |  cp -R test /www/test2 

Ma puoi aiutarmi con la sintassi?

Risposte:


10

Usa rsync:

rsync -a --exclude=logs --exclude=log from/ to/

il rynsc ha funzionato alla grande per me!
Micheal,

rsync ora è il mio nuovo amico :) Grazie, la spiegazione è chiara
Aleks,

2

Penso che tu stia cercando qualcosa come:

find dir -type d ! \( -name 'log' -o -name 'logs' \) | xargs -I{} cp -R {} /www/test2/{}

@sputnick guarda le mie modifiche. Sentiti libero di offrire la regex emacs per questo se ti capita di conoscerlo.
Tim Pote,

0

Se si utilizza :

shopt -s extglob
cp -R test/!(log|logs) /www/test2

Vedi http://wiki.bash-hackers.org/syntax/pattern


Cosa succede quando la struttura è così test/someotherdir/logs:? OP non ha mai detto loged logsera la seconda directory più alta.
Tim Pote,

Se rileggi il find ~test -not -name logs,logregistro dei comandi OP, i registri devono essere una sottodirectory.
Gilles Quenot,

findguarda ricorsivamente attraverso tutte le sottodirectory. Il globbing dei file no. Perché la tua risposta funzioni, loge logsdovrebbe essere una sottodirectory immediata di test.
Tim Pote,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.