รับรายการไฟล์ที่ถ่ายโอนจาก rsync หรือไม่


15

ขณะนี้ฉันใช้rsyncสคริปต์ที่ปรับใช้แอปพลิเคชัน PHP จากการจัดเตรียมไปยังเซิร์ฟเวอร์การผลิต นี่คือวิธี:

rsync -rzai --progress --stats --ignore-times --checksum /tmp/app_export/ root@app.com:/var/www/html/app/

ขณะนี้กำลังแสดงรายการของทุกไฟล์ที่กำลังถูกเปรียบเทียบ (ทุกไฟล์ในโครงการ) แต่ฉันต้องการให้ส่งออกเฉพาะรายการที่แก้ไขดังนั้นฉันสามารถเรียกใช้ด้วย--dry-runตัวเลือกเพื่อตรวจสอบว่าการปรับใช้ทั้งหมดกำลังอัปเดตเฉพาะ ไฟล์ที่ต้องการ

หมายเหตุ: สิ่งที่ดีที่สุดที่ฉันสามารถทำได้คือgrep fcstผลลัพธ์ แต่ฉันกำลังมองหาrsyncตัวเลือกที่ฉันแน่ใจว่ามี แต่ฉันไม่สามารถหาได้ในหน้าคู่มือ

ขอบคุณล่วงหน้า!

คำตอบ:


6

หากมีตัวเลือก rsync ให้ทำสิ่งที่คุณขออย่างแน่นอนฉันไม่พบมันใน manpage เช่นกัน :-)

ที่กล่าวว่าฉันไม่เห็นปัญหากับการ grepping ผลลัพธ์ของrsync -iการแยกวิเคราะห์สิ่งที่คุณต้องการ รู้สึกดีและ Unixy สำหรับฉัน

เล่นลิ้นหนึ่งจู้จี้จุกจิกกับคำสั่ง rsync คุณ: ซ้ำซ้อนเป็นมันก็ส่อให้เห็นโดย-r-a


2
ขอบคุณชาย ฉันสงสัยว่าทำไม (ด้วยตัวเลือกที่หลากหลายที่โปรแกรมนี้มี) ไม่มีตัวเลือกสำหรับสิ่งนั้น ดูเหมือนพื้นฐานสำหรับฉัน
Mauro

สวัสดีเควินจริง ๆ แล้วมีตัวเลือก: -Pสำหรับความคืบหน้าไม่ว่าในการ-nตั้งค่า dryrun แม้ว่า-iจะไม่ผิดทั้ง ดูคำตอบของฉันด้านล่าง
Robert Riedl

7

ใช้--out-formatตัวเลือก

ตามหน้าคน:

การระบุ--out-formatตัวเลือกจะกล่าวถึงแต่ละไฟล์ dir ฯลฯ ที่ได้รับการอัปเดตอย่างมีนัยสำคัญ (ไฟล์ที่ถูกถ่ายโอน symlink / อุปกรณ์ที่สร้างขึ้นใหม่หรือไดเรกทอรี)

หากคุณต้องการชื่อไฟล์จริงเท่านั้น ( --out-format="%n") คำสั่ง dry run อาจมีลักษณะดังนี้:

rsync -rzan --out-format="%n" --ignore-times --checksum /tmp/app_export/ root@app.com:/var/www/html/app/


เมื่อ rsync ถูกเรียกใช้-vมันจะใช้ตัวเลือกนี้พร้อมกับรูปแบบเริ่มต้น"%n%L"ซึ่งจะบอกชื่อของไฟล์และหากรายการนั้นคือลิงค์ซึ่งเป็นจุด

แต่ยังรวมถึงบทสรุปสั้น ๆ ที่จุดเริ่มต้นและจุดสิ้นสุดของกระบวนการซิงค์

ในการกำจัดข้อมูลสรุปให้ใช้--out-formatตัวเลือกโดยตรง

Btw -iนอกจากนี้ยังใช้ภายในแต่มีรูปแบบของ--out-format"%i %n%L"


4

เริ่มต้นด้วย rsync v3.1.0 ซึ่งเปิดตัวในปี 2013 มีการ--infoตั้งค่าสถานะซึ่งช่วยให้สามารถควบคุมเอาต์พุตได้อย่างละเอียด

 --info=FLAGS
          This option lets you have fine-grained control over the information output you want to see.  An individual flag name may be followed
          by a level number, with 0 meaning to silence that output, 1 being the default output level, and higher numbers increasing the output
          of that flag (for those that support higher levels).  Use --info=help to see all the available flag names,  what  they  output,  and
          what flag names are added for each increase in the verbose level.  Some examples:

              rsync -a --info=progress2 src/ dest/
              rsync -avv --info=stats2,misc1,flist0 src/ dest/

          Note  that  --info=names  output  is  affected  by the --out-format and --itemize-changes (-i) options.  See those options for more
          information on what is output and when.

          This option was added to 3.1.0, so an older rsync on the server side might reject your attempts at fine-grained control (if  one  or
          more  flags  needed  to  be  send to the server and the server was too old to understand them).  See also the "max verbosity" caveat
          above when dealing with a daemon.

ที่มี--infoธงคือ:

Use OPT or OPT1 for level 1 output, OPT2 for level 2, etc.; OPT0 silences.

BACKUP     Mention files backed up
COPY       Mention files copied locally on the receiving side
DEL        Mention deletions on the receiving side
FLIST      Mention file-list receiving/sending (levels 1-2)
MISC       Mention miscellaneous information (levels 1-2)
MOUNT      Mention mounts that were found or skipped
NAME       Mention 1) updated file/dir names, 2) unchanged names
PROGRESS   Mention 1) per-file progress or 2) total transfer progress
REMOVE     Mention files removed on the sending side
SKIP       Mention files that are skipped due to options used
STATS      Mention statistics at end of run (levels 1-3)
SYMSAFE    Mention symlinks that are unsafe

ALL        Set all --info options (e.g. all4)
NONE       Silence all --info options (same as all0)
HELP       Output this help message

Options added for each increase in verbose level:
1) COPY,DEL,FLIST,MISC,NAME,STATS,SYMSAFE
2) BACKUP,MISC2,MOUNT,NAME2,REMOVE,SKIP

1
มันยอดเยี่ยมมากขอบคุณ ฉันไม่รู้ว่ามีการตั้งค่าสถานะนี้เนื่องจากฉันใช้ Mac - แม้แต่ MacOS ล่าสุดติดตั้ง rsync เวอร์ชันตั้งแต่ปี 2004 lol ไชโย Apple ...
twistedpixel

0

ไม่แน่ใจว่าสิ่งนี้แตกต่างกันระหว่างรุ่น / ตัวเลือกที่ใช้ แต่ในรุ่น mys เมื่อฉันใช้-iตัวเลือกฉันได้รับรายการเช่น:

>f..T...... existing-file.png
>f+++++++++ new-file.png
cd+++++++++ new-dir/
>f+++++++++ new-dir/new-file.png

ดังนั้นวิธีง่ายๆในการรับเฉพาะรายการไฟล์ที่ถ่ายโอนจริงเพียงแค่เรียกใช้:

rsync [your options here] | grep -v "f..T......"

f..T......นี้ก็จะซ่อนสายทั้งหมดที่มี อย่างมีประสิทธิภาพนี้จะซ่อนไฟล์ที่เหมือนกัน


0

จริงๆแล้วคุณตอบคำถามของคุณเองเนื่องจากคำสั่งดั้งเดิมของคุณมี: --progress

นี่เป็นตัวเลือกที่ถูกต้องแม้ว่าหน้า man จะเป็นความลับเล็กน้อยเกี่ยวกับมัน:

     --progress              show progress during transfer
 -P                          same as --partial --progress

เป็นเรื่องที่สมเหตุสมผลเนื่องจากคุณเรียกใช้rsyncสตริงของคุณด้วยโหมด dryrun จะไม่มี transer เกิดขึ้น แต่คุณยังคงมีความคืบหน้า: คือไฟล์ที่เปลี่ยนแปลงและจะถูกถ่ายโอน

วิธีนี้คุณจะได้รายชื่อไฟล์ทั้งหมดที่เรียบร้อยตัวอย่างเช่น:

ปลายทางมีสำเนาของไฟล์การเปลี่ยนแปลงซึ่งได้รับการอัพเดตในซอร์สและไฟล์เก่าซึ่งยังคงไม่เปลี่ยนแปลง แหล่งที่มายังมีไฟล์ additonal: newfile

#~$ ls -lhan /tmp/destination/
total 20K
drwxrwxr-x  2 1000 1000 4,0K Jän 31 09:07 .
drwxrwxrwt 18    0    0  12K Jän 31 09:15 ..
-rw-rw-r--  1 1000 1000    2 Jän 31 09:08 changedfile
-rw-rw-r--  1 1000 1000    0 Jän 31 09:07 oldfile



#~$ ls -lhan /tmp/source/
total 20K
drwxrwxr-x  2 1000 1000 4,0K Jän 31 09:07 .
drwxrwxrwt 18    0    0  12K Jän 31 09:15 ..
-rw-rw-r--  1 1000 1000    2 Jän 31 09:15 changedfile
-rw-rw-r--  1 1000 1000    0 Jän 31 09:07 newfile
-rw-rw-r--  1 1000 1000    0 Jän 31 09:07 oldfile

ถ้าเราเรียกใช้คำสั่ง rsync ของคุณ แต่ลบการแยกเป็นรายการ-iและเพิ่ม dryrun-n

#~$ ~$ rsync -n -rza --progress --stats --ignore-times --checksum /tmp/source/ /tmp/destination/
sending incremental file list
changedfile
newfile

Number of files: 4 (reg: 3, dir: 1)
Number of created files: 1 (reg: 1)
Number of deleted files: 0
Number of regular files transferred: 2
Total file size: 2 bytes
Total transferred file size: 2 bytes
Literal data: 0 bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 187
Total bytes received: 22

sent 187 bytes  received 22 bytes  418.00 bytes/sec
total size is 2  speedup is 0.01 (DRY RUN)

คุณได้รับรายการของไฟล์ rsync เท่านั้นที่ tranfser: changefile และ newfile

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