ฉันจะแยกไดเรกทอรีย่อยทั้งหมด แต่รวมไฟล์ของไดเรกทอรีใน rsync ได้อย่างไร


13

ฉันต้องการที่จะสำรองข้อมูลของระบบ Ubuntu ฉันและฉันมีสองพาร์ทิชันเพื่อการดูแล: หนึ่งคืออื่นเป็น//home

/ฉันอาจจะต้องการสำรองข้อมูล นี่ไม่ใช่เรื่องใหญ่ขนาดนั้นดังนั้นฉันจึงสามารถพกมันไว้ในการ์ด SD ของฉันได้ในขณะที่ตอบสนองได้ดีพอที่จะทำให้ฉันต้องการมีภาพของมัน (นั่นเป็นสาเหตุที่ฉันพยายามใช้ rsync ในขณะนี้)

และเกี่ยวกับ/homeมันมีไดเรกทอรีย่อยจำนวนมากที่ผมไม่เกี่ยวกับการดูแลมากดังนั้นฉันจะไม่น่าจะรวมพวกเขา แต่ผมต้องการที่จะดูแลเกี่ยวกับไฟล์บนมีเช่น.bash_history, .bashrc, .faceและอื่น ๆ

ดังนั้นฉันต้องการยกเว้นไดเรกทอรีย่อยทั้งหมดในขณะที่รวมไฟล์ไว้/homeด้วย ฉันจะบรรลุสิ่งนั้นได้อย่างไร

--exclude "*/"ไม่ทำงาน "/*/", "/**/", --include "*" --exclude */ไม่ได้แสดงให้ฉันสิ่งที่ฉันต้องการ อย่างน้อยก็คัดลอกโฟลเดอร์ซอร์สโดยไม่ต้องคัดลอกอะไรข้างใน

คำตอบ:


17

ลองคำสั่งนี้:

rsync -a -f"- */" -f"+ *" /home/user/ destination/

man rsync

-f, --filter=RULE           add a file-filtering RULE

กฎที่จะรวมไฟล์ทั้งหมด*และไม่รวม dirs*/

อีกวิธีในการใช้สำเนาปกติ cp

cp /home/usr/* /destination

คุณสามารถกำจัดข้อผิดพลาดเกี่ยวกับ dirs โดยใช้การเปลี่ยนเส้นทาง

cp /home/usr/* /destination 2>/dev/null

สิ่งนี้จะคัดลอกไฟล์ภายในบ้านของคุณโดยไม่มีไดเรกทอรี


/ proc มีระบบแฟ้มเสมือนจริงที่ไม่จริงคุณควรแยกออกจากการสำรองข้อมูลและคุณควรยกเว้น / tmp และ / run
Maythux

คำสั่งดั้งเดิมของฉันสำหรับการสำรองสิ่งต่าง ๆ เป็นเช่นนี้:rsync -r -t -p -o -g -v --progress --delete --modify-window=1 -l -H -b -s --exclude home/dinir/ --exclude media/ --exclude proc/kcore / /home/dinir/Temporal Site for Storing Backups
Dinir

/ proc, / tmp, และ / run, Check! อย่างไรก็ตามอย่างที่คุณเห็นในความคิดเห็นของฉันฉันจะสำรองระบบไฟล์รากทั้งหมดยกเว้นไดเรกทอรีบ้านที่มีข้อยกเว้นเล็กน้อย การใส่-f" */" -f"+ *"รหัสของฉันจะปลอดภัยหรือไม่ มันอาจจะเป็น-f"- home/dinir/*/" -f"+ home/dinir/*"อย่างไร
Dinir

คุณควรใช้มันอย่างนั้น-f"- home/dinir/*/" -f"+ home/dinir/*"
Maythux

แต่ฉันแนะนำให้ใช้ cp สำหรับบ้านของคุณมันง่ายกว่ามาก
Maythux

3

หากคุณต้องการแก้ปัญหาด้วย--includeและ--excludeพารามิเตอร์คุณควรเปลี่ยนลำดับของพวกเขาก่อนอื่นแยกสิ่งที่คุณต้องการแล้วรวมทุกอย่าง ฉันมักจะทำด้วยคำสั่งนี้:

rsync -vazhP path/to/source path/to/dest --exclude '*/*/' --include '*'

2

โดยค่าเริ่มต้นrsyncจะไม่คัดลอกไดเรกทอรี บางทีคุณกำลังใช้-aธง หากเป็นกรณีนี้แจ้งให้ทราบว่าตามที่หน้าคน , -aเทียบเท่ากับ-rlptgoDดังนั้นหากคุณไม่ต้องการที่จะ recurse -lptgoDใช้เพียง


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