Lấy danh sách các tập tin được chuyển từ rsync?


14

Tôi hiện đang sử dụng rsynctập lệnh triển khai ứng dụng PHP từ dàn đến máy chủ sản xuất. Đây là cách thực hiện:

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

Điều này hiện đang đưa ra danh sách mọi tệp được so sánh (mọi tệp trong dự án), nhưng tôi muốn nó chỉ xuất ra những tệp đã sửa đổi, vì vậy tôi có thể chạy nó với --dry-runtùy chọn để kiểm tra xem mọi triển khai chỉ cập nhật tập tin mong muốn.

LƯU Ý: Điều tốt nhất tôi có thể làm cho đến nay là grep fcstkết quả, nhưng tôi đang tìm kiếm một rsynctùy chọn mà tôi chắc chắn là có nhưng tôi không thể tìm thấy nó trong các trang hướng dẫn.

Cảm ơn trước!

Câu trả lời:


6

Nếu có một tùy chọn rsync để thực hiện chính xác những gì bạn yêu cầu, tôi cũng không tìm thấy nó trong trang chủ. :-)

Điều đó nói rằng, tôi không thấy vấn đề với việc đầu ra rsync -iđể phân tích chính xác những gì bạn cần. Điều đó cảm thấy tốt đẹp và Unixy với tôi.

Một ngụy biện nit-kén với lệnh rsync của bạn: đó -rlà dự phòng, vì nó được ngụ ý bởi -a.


2
Cảm ơn người đàn ông. Tôi tự hỏi tại sao (với sự đa dạng của các tùy chọn mà chương trình này có) không có tùy chọn nào cho điều đó. Có vẻ khá cơ bản đối với tôi.
Mauro

Xin chào Kevin, thực sự có một tùy chọn: -Pvì sự tiến bộ thực hiện chính xác điều đó trong -ncài đặt khô, mặc dù điều đó -icũng không sai. Xem câu trả lời của tôi dưới đây.
Robert Riedl

6

Sử dụng --out-formattùy chọn

Theo trang người đàn ông:

Chỉ định --out-formattùy chọn sẽ đề cập đến từng tệp, thư mục, v.v. được cập nhật theo cách quan trọng (tệp được chuyển, symlink / thiết bị được tạo lại hoặc thư mục).

Nếu bạn chỉ cần tên tệp thực tế ( --out-format="%n") lệnh chạy khô của bạn có thể trông như sau:

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


Khi rsync được gọi với -v, bên trong nó sử dụng tùy chọn này với định dạng mặc định "%n%L", nó chỉ cho bạn biết tên của tệp và, nếu mục đó là một liên kết, nơi nó trỏ đến.

Nhưng điều này cũng bao gồm một bản tóm tắt ngắn ở đầu và cuối quá trình đồng bộ hóa.

Để thoát khỏi tóm tắt đó, sử dụng --out-formattùy chọn trực tiếp.

Btw. -icũng sử dụng nội bộ --out-format, nhưng với một định dạng "%i %n%L".


3

Bắt đầu với rsync v3.1.0, được phát hành vào năm 2013, có --infocờ cho phép kiểm soát chi tiết trên đầu ra.

 --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.

Các --infocờ có sẵn là:

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
Điều này thật tuyệt vời, cảm ơn. Tôi không biết cờ này tồn tại vì tôi sử dụng máy Mac - ngay cả MacOS mới nhất cũng cài đặt phiên bản rsync từ năm 2004 lol. Chúc mừng Apple ...
twistpixel

0

Không chắc chắn nếu điều này khác nhau giữa các phiên bản / tùy chọn được sử dụng nhưng trong phiên bản mys khi tôi sử dụng -itùy chọn, tôi nhận được một danh sách như:

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

Vì vậy, một giải pháp đơn giản để chỉ nhận một danh sách các tệp thực sự được chuyển chỉ cần chạy:

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

Điều này chỉ đơn giản là sẽ ẩn tất cả các dòng chứa f..T....... Vì vậy, hiệu quả này sẽ ẩn các tập tin giống hệt nhau.


0

Trên thực tế, bạn đã trả lời câu hỏi của riêng mình, vì lệnh ban đầu của bạn đã có rồi: --progress

Đây là tùy chọn chính xác, mặc dù trang man hơi khó hiểu về nó:

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

Thật có ý nghĩa, vì bạn gọi rsyncchuỗi của mình với chế độ khô, không có bộ chuyển đổi nào xảy ra, nhưng bạn vẫn có tiến trình: cụ thể là các tệp đã thay đổi và sẽ được chuyển.

Bằng cách này, bạn có được một danh sách nhỏ gọn của tất cả các tệp, ví dụ:

Đích đã có một bản sao của tệp đã thay đổi được cập nhật trong nguồn và tệp cũ, vẫn không thay đổi. Nguồn cũng có một tệp bổ sung: 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

Nếu sau đó chúng tôi gọi lệnh rsync của bạn, nhưng loại bỏ ghi mục -ivà chỉ cần thêm 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)

Bạn nhận được một danh sách chỉ các tệp rsync sẽ tranfser: changefile và newfile.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.