rsync - รายงานไฟล์ที่อัพโหลดเท่านั้น


14

ฉันมีปัญหากับ rsync: อาจแสดงไฟล์ทั้งหมดในไดเรกทอรีที่ฉันกำลัง rsyncing (ถ้าใช้แฟล็ก-v) หรือไม่มีอะไรเลย (เมื่อไม่ได้ใช้-v)

ฉันต้องการให้ rsync เงียบยกเว้นไฟล์ที่ต้องอัพโหลดจริง ๆ มีการตั้งค่าสถานะเพื่อเปิดใช้งานการรายงานประเภทนี้หรือไม่ ฉันไม่พบสิ่งนี้ในเอกสารประกอบ

คำตอบ:


11

ใช่ตรวจสอบการ-iตั้งค่าสถานะ มันให้รายงานของการดำเนินการทุกครั้งในรูปแบบ cryptic ดู man page สำหรับคำจำกัดความที่แน่นอนของรูปแบบ

ในการรับรายการไฟล์ที่ส่งไปยังรีโมตโฮสต์คุณสามารถใช้สิ่งต่อไปนี้:

rsync <options> -i <src> <dst> | grep '^<' | awk '{ print $2 }'

1
นี่เป็นการรายงานไฟล์ทั้งหมดอีกครั้งไม่ใช่ไฟล์ที่เปลี่ยนแปลง
dangonfast

@gonvaled ไม่เฉพาะไฟล์ที่ส่งไปยังรีโมตโฮสต์เท่านั้นที่เป็นเอาท์พุท (เช่น<fcstpoguax filenameที่แฟล็กต่างกันแสดงสาเหตุที่ต้องอัปเดต) หากรายงานไฟล์ทั้งหมดอาจมีบางอย่างผิดปกติกับการทดสอบหรือสภาพแวดล้อมของคุณ
Oliver

ฉันคิดว่าคุณถูก. ฉันดู manpage แล้วมันก็อธิบายตามที่คุณพูด แต่ระบบของฉันกำลังรายงานไฟล์ทั้งหมด อาจจะมีบางอย่างผิดปกติกับสิ่งที่อยู่ไกลสุด
dangonfast

mmmm การใกล้ชิด: สตริงรายงานคือ <f..T......(สำหรับไฟล์ทั้งหมด) ตาม manpage นี้เกี่ยวข้องกับการประทับเวลา
dangonfast

1
การใช้grep -E '^[^.]|^$'จะช่วยให้สถิติ (หรือคำเตือน, ข้อผิดพลาด, ... ) บรรทัดผ่านเพียงลบบรรทัดที่น่าเบื่อจริงๆเริ่มต้นด้วยจุด ...
Frank Nocke

10

rsync ด้วยไฟล์-vจริงเพียงไฟล์เดียวเท่านั้น หากคุณได้รับรายการที่สมบูรณ์ทุกครั้งก็อาจหมายความว่าอัลกอริทึมการเปรียบเทียบ rsync src / dest เริ่มต้นซึ่งขึ้นอยู่กับเวลาการปรับเปลี่ยน + ขนาดไม่เหมาะสำหรับกรณีของคุณ คุณสามารถเพิ่มการตั้งค่าสถานะ-c( --checksum) ซึ่งทำให้ rsync เปรียบเทียบไฟล์โดยการตรวจสอบ โปรดทราบว่าสิ่งนี้เห็นได้ชัดว่าเกิดค่าใช้จ่าย I / O บางอย่าง

ความเกี่ยวข้องเล็กน้อยคือความจริงที่ว่าถ้าคุณใช้--info=flistแทนคุณ-vจะได้ผลลัพธ์ที่ถูกตัดทอนของไฟล์ (โดยทั่วไปคุณข้ามส่วนหัวและส่วนท้ายของ-vเอาต์พุตทั่วไป)


1
--info=flistใช้ได้เฉพาะใน rsync> = 3.1 ซึ่งไม่สามารถใช้ได้ทุกที่ ตัวอย่างเช่น macOS มาพร้อมกับเวอร์ชันโบราณ 2.6.9 เนื่องจาก Rsync v3 นั้นไม่ได้เป็น GPL 3
chiborg

1
ในขณะที่ข่าวลือของ Apple GPL นั้นฉ่ำมากยังจำได้ว่า Enterprise Linux มีช่วงการสนับสนุนขนาดใหญ่ (14 ปี) ที่รุ่นถูกล็อค (และแยก) เพื่อรักษาใบรับรองและรับประกันความเข้ากันได้ (api + abi) ตลอดอายุการใช้งานที่รองรับ . จริงๆแล้วมันเป็นวิธีเดียวที่เป็นไปได้ในการทำเช่นนั้นและผลข้างเคียงคือหมายเลขรุ่นจะปรากฏขึ้นที่ฟีเจอร์เก่าและใหม่ไม่กระทบกับ Enterprise สำหรับสิ่งที่อาจดูเหมือนเป็นเวลานาน
user2066657

2

สิ่งหนึ่งที่อยู่ในใจของฉันคือการใช้รูปแบบแฟ้มบันทึก verbose เพิ่มเติมและ awk'ing สิ่งที่คุณต้องการได้รับ

เช่น:

rsync -a --out-format="%b  %i %f" /etc/ /tmp/qq/ |awk '{if ($1>0) {print $3}}'

สิ่งนี้ไม่แข็งแกร่งมากมันจะไม่จัดการชื่อไฟล์ที่ดีด้วยช่องว่าง


1

1. ใช้-iตัวเลือก

สำหรับแฟล็กการเปลี่ยนแปลงที่เป็นไอคอน (หรือ: cryptic) เหล่านี้ คุณจะมีลักษณะเช่นนี้:

*deleting   DSC00012 (copy).JPG
.d..tp..... ./
.f...p..... DSC00011.JPG
>f+++++++++ DSC00012 (copy2).JPG
>f.stp..... DSC00012.JPG
.f...p..... DSC00014.JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
... more statistic stuff
sent 636.01K bytes  received 4.63K bytes  1.28M bytes/sec
total size is 2.84M  speedup is 4.44

2. grep ทุกบรรทัดเริ่มต้นด้วยจุด

ปล่อยให้บรรทัดอื่น ๆ ทั้งหมด (เช่นบรรทัดว่างสำหรับความชัดเจน) ผ่าน:

rsync -arz -i --stats -h ... /mnt/FooDrive/ /mnt/backup  | grep -E '^[^.]|^$'

และนี่คือ :-) - สิ่งที่แพทย์สั่ง:

*deleting   DSC00012 (copy2).JPG
>f.stp..... DSC00011.JPG
>f+++++++++ DSC00012 (copy).JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
...

การหลีกเลี่ยงจุดมากกว่าการหาเพื่อให้ >ได้ประโยชน์เช่นกันเพื่อให้สถิติ แต่ยังมีข้อผิดพลาดที่อาจเกิดขึ้นคำเตือน ฯลฯ ผ่าน ...

การมีสถิติในตอนท้ายเป็นความชอบส่วนตัว อย่าใช้-h --statsถ้าคุณไม่ชอบสิ่งเหล่านี้ ฉันถือว่าความสนใจหลักของคุณคือการไม่เห็นไฟล์ที่ไม่เปลี่ยนแปลงนับแสนเลื่อน ...


0

ฉันไม่คิดว่ามีธงทำเช่นนี้ แต่อาจจะมีตอนนี้ นี่คือวิธีที่ฉันทำ:

rsync -vv [other options] | grep -v 'uptodate'

1
rsync ของฉัน (รุ่น 3.0.7) ไม่ได้เพิ่มลงuptodateในการรายงานดังนั้นจึงไม่สามารถกรองสิ่งนั้นออกได้
dangonfast

ฉันต้องการแก้ไขหรืออย่างน้อยก็ชี้แจงว่าไมค์โพสต์ไว้ด้านบนและ @ jeckyll2hide ชี้ให้เห็นอะไร ฉันคิดว่าปัญหาไม่ใช่ rsync -v ไม่ปล่อยสตริง "uptodate" อีกต่อไป แต่คุณต้องใช้ rsync -vv อีกต่อไป โปรดสังเกตว่าทั้งสองกับฉันเพิ่งตรวจสอบนี้ทำงานบน Ubuntu 14.04 กับ rsync รุ่น 3.1.0 คุณช่วยอัพเดทโพสต์ของคุณให้สะท้อนสิ่งนี้
John Mark Mitchell
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.