rsyncから転送されたファイルのリストを取得しますか?


14

現在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オプションがある場合、マンページでもそれを見つけられませんでした。:-)

とは言っても、rsync -i必要なものを正確に解析するために、出力をgrepすることに問題はないと思います。それは私にとってすてきで、Unixyに感じます。

rsyncコマンドを使用した一風変わったquiい:-rによって暗示されているように、これは冗長-aです。


2
ありがとう。(このプログラムにさまざまなオプションがあるのに)そのためのオプションがないのはなぜだろうか。私にはかなり基本的なようです。
マウロ

こんにちはケビン、実際にはオプションがあります:ドライラン設定でも-Pまったく同じように進行しますが、どちらも間違っていません。以下の私の答えをご覧ください。-n-i
ロバートリードル

6

--out-formatオプションを使用する

manページによると:

--out-formatオプションを指定すると、重要な方法で更新される各ファイル、ディレクトリなど(転送されたファイル、再作成されたシンボリックリンク/デバイス、またはディレクトリ)が示されます。

実際のファイル名(--out-format="%n")のみが必要な場合、ドライランコマンドは次のようになります。

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


rsyncがで呼び出されると-v"%n%L"ファイルの名前だけでなく、アイテムがリンクの場合はそれが指す場所を示すデフォルトの形式のこのオプションを内部で使用します。

ただし、これには同期プロセスの最初と最後の短い要約も含まれます。

その要約を取り除くには、--out-formatオプションを直接使用します。

ところで -i内部的にも使用します--out-formatが、形式は"%i %n%L"


3

2013年にリリースされたrsync v3.1.0から--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でさえ、2004年からrsyncバージョンをインストールします(笑)。チアーズアップル
...-twistedpixel

0

これが使用されているバージョン/オプション間で異なるかどうかはわかりませんが、私のバージョンでは-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

これは正しいオプションですが、マニュアルページは少しわかりにくいです:

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

rsyncdryrunモードで文字列を呼び出すと、transerは発生しませんが、まだ進行中です。つまり、変更されて転送されるファイルです。

このようにして、すべてのファイルのきちんとした小さなリストを取得します。例えば:

宛先には、ソースとoldfileで更新された変更されたファイルのコピーが既にあり、変更されないままです。ソースには、追加ファイル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するファイルのみのリストを取得します:changedfileおよびnewfile。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.