คัดลอกไฟล์ทั้งหมดซ้ำจากไดเรกทอรีหนึ่งไปอีกไดเรกทอรีหนึ่งโดยมีข้อยกเว้น


8

ฉันจะต้องคัดลอกไฟล์ทั้งหมดยกเว้นสองสามไดเรกทอรีจากไดเรกทอรีหนึ่งไปยังอีก สำหรับเช่น:

cp -R test /www/test2 would copy all

แต่ฉันต้องการยกเว้น 2 โฟลเดอร์ที่เรียกว่าบันทึกและบันทึก

ฉันลองทำสิ่งที่ชอบ:

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

แต่คุณช่วยฉันด้วยไวยากรณ์ได้ไหม

คำตอบ:


10

ใช้ rsync:

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

rynsc kinda ทำงานได้ดีสำหรับฉัน!
Micheal

rsync ตอนนี้เป็นเพื่อนใหม่ของฉัน :) ขอบคุณคำอธิบายนั้นเรียบร้อย
Aleks

2

ฉันคิดว่าคุณกำลังมองหาสิ่งที่ชอบ:

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

@sputnick ดูการเปลี่ยนแปลงของฉัน อย่าลังเลที่จะเสนอ emacs regex สำหรับสิ่งนี้หากคุณรู้ว่ามันเกิดขึ้น
ทิมพจน์

0

หากใช้งาน :

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

ดูhttp://wiki.bash-hackers.org/syntax/pattern


จะเกิดอะไรขึ้นเมื่อโครงสร้างมีดังนี้: test/someotherdir/logs? OP ไม่เคยพูดlogและlogsเป็นไดเรกทอรีที่สองที่สูงที่สุด
ทิมพจน์

หากคุณอ่านfind ~test -not -name logs,logบันทึกคำสั่ง OP & บันทึกใหม่ควรเป็นรหัสย่อย
Gilles Quenot

findดูซ้ำผ่านไดเรกทอรีย่อยทั้งหมด ไฟล์ globbing ไม่ได้ สำหรับคำตอบของคุณไปทำงานlogและlogsจะต้องมีการทันทีtestไดเรกทอรีย่อยของ
ทิมพจน์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.