Aktarılan dosyaların listesini rsync'den al?


15

Şu anda rsyncbir üretim sunucusuna bir aşamadan bir PHP uygulaması dağıtan bir komut dosyası kullanıyorum . İşte böyle:

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

Bu şu anda (projedeki her dosya) karşılaştırılan her dosyanın bir listesini çıktısı, ama ben sadece değiştirilmiş olanları çıktısını istiyorum, bu yüzden --dry-runher dağıtım sadece güncelleştirme kontrol etmek için bir seçenek ile çalıştırabilirsiniz istenen dosyalar.

NOT: Şimdiye kadar yapabileceğim en iyi grep fcstsonuçlar, ama rsyncorada olduğundan eminim bir seçenek arıyorum ama adam sayfalarında bulamıyorum.

Şimdiden teşekkürler!

Yanıtlar:


6

Tam olarak sorduğunuz şeyi yapmak için bir rsync seçeneği varsa, bunu manpage'de de bulamadım. :-)

Dedi ki, rsync -itam olarak neye ihtiyacınız olduğunu ayrıştırmak için çıkışını selamlamakla ilgili bir sorun görmüyorum . Bu bana güzel ve Unixy geliyor.

Rsync komutunuzla bir nit seçici tartışması: -rima edildiği gibi gereksizdir -a.


2
Teşekkürler dostum. Acaba neden (bu programın çeşitli seçeneklerle) bunun için bir seçenek yok. Benim için oldukça basit görünüyor.
Mauro

Merhaba Kevin, aslında bir seçenek var: -Pilerleme için tam olarak -ndryrun ayarında da olsa -i, yanlış da değil. Cevabımı aşağıda görebilirsiniz.
Robert Riedl

7

--out-formatSeçeneği kullan

Man sayfasına göre:

--out-formatSeçeneğin belirtilmesi, önemli bir şekilde güncellenen her dosya, dizin, vb.

Yalnızca gerçek dosya adlarına ( --out-format="%n") ihtiyacınız varsa , kuru çalıştırma komutunuz şöyle görünebilir:

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


Rsync ile çağrıldığında -v, dahili olarak bu seçeneği varsayılan biçimiyle kullanır; bu "%n%L", yalnızca dosyanın adını ve öğenin bir bağlantı ise işaret ettiği yeri belirtir.

Ancak bu, senkronizasyon işleminin başında ve sonunda kısa bir özet de içerir.

Bu özetten kurtulmak için --out-formatseçeneği doğrudan kullanın.

Btw. -iAyrıca dahili olarak kullanır --out-format, ancak bir biçimiyle "%i %n%L".


4

2013 yılında piyasaya sürülen rsync v3.1.0'dan başlayarak, çıktı --infoüzerinde hassas kontrol sağlayan bayrak var.

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

Mevcut --infobayraklar:

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
Bu harika, teşekkürler. Bir Mac kullandığım için bu bayrağın var olduğu hakkında hiçbir fikrim yoktu - en son MacOS bile 2004 lol'den bir rsync sürümü yükler. Şerefe Elma ...
twistedpixel

0

Bu kullanılan sürümler / seçenekler arasında farklılık olup olmadığını emin değilim ama ben mys sürümü -iseçeneğini kullandığınızda gibi bir liste olsun:

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

Yani sadece aktarılan dosyaların bir listesini almak için basit bir çözüm sadece çalıştırın:

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

Bu, içeren tüm satırları gizleyecektir f..T....... Bu etkili bir şekilde aynı dosyaları gizleyecektir.


0

Aslında, orijinal komutunuzda zaten olduğu için kendi sorunuzu cevapladınız: --progress

Man sayfası bu konuda biraz şifreli olmasına rağmen, bu doğru seçenektir:

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

rsyncDizinizi dryrun modu ile çağırdığınız için , bir transer gerçekleşmez, ancak yine de ilerleme kaydedersiniz: yani değişen ve aktarılacak dosyalar.

Bu şekilde, tüm dosyaların küçük bir listesini alırsınız, örneğin:

Hedef, kaynakta güncellenen ve değiştirilmemiş kalan eski dosyada zaten değiştirilmiş bir dosyanın bir kopyasına sahip. Kaynak ayrıca ek bir dosyaya sahiptir: 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

Daha sonra rsync komutunuzu -içağırırsak , ancak öğelemeyi kaldırır ve sadece dryrun eklersek-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)

Sadece rsync'nin tranfser: dosyadosyası ve yenidosyalarının bir listesini alırsınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.