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.