salin secara rekursif semua file dari satu direktori ke direktori lain dengan pengecualian

8

Bagaimana saya perlu menyalin semua file kecuali beberapa direktori dari satu direktori ke direktori lain. untuk misalnya:

cp -R test /www/test2 would copy all

Tetapi saya ingin mengecualikan 2 folder yang disebut log dan log.

Saya mencoba sesuatu seperti:

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

Tetapi bisakah Anda membantu saya dengan sintaks?

Micheal
sumber

Jawaban:

10

Gunakan rsync:

rsync -a --exclude=logs --exclude=log from/ to/
bobah
sumber
rynsc agak bekerja keren untukku!
Micheal
rsync sekarang adalah teman baruku :) Terima kasih, penjelasannya rapi
Aleks
2

Saya pikir Anda sedang mencari sesuatu seperti:

find dir -type d ! \( -name 'log' -o -name 'logs' \) | xargs -I{} cp -R {} /www/test2/{}
Tim Pote
sumber
@sputnick, lihat perubahan saya. Jangan ragu untuk menawarkan emacs regex untuk ini jika Anda mengetahuinya.
Tim Pote
0

Jika menggunakan :

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

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

Gilles Quenot
sumber
Apa yang terjadi ketika strukturnya seperti itu test/someotherdir/logs:? OP tidak pernah mengatakan logdan logsmerupakan direktori tertinggi kedua.
Tim Pote
Jika Anda membaca kembali find ~test -not -name logs,loglog perintah OP & log haruslah menjadi sub-dir.
Gilles Quenot
findterlihat secara rekursif melalui semua sub-direktori. File globbing tidak. Untuk jawaban Anda untuk bekerja, logdan logsakan harus segera sub-direktori dari test.
Tim Pote