web-dev-qa-db-ja.com

rsyncを使用して、変更されたファイルのみのリストを作成できますか?

いくつかのサーバーとNASの間でファイルの同期を保つために、bashスクリプトでrsyncを使用しています。私が遭遇した1つの問題は、rsync中にから変更されたファイルのリストを生成しようとすることです。

アイデアは、rsyncを実行すると、テキストファイルに変更されたファイルを出力できる-メモリ内の配列を期待する-スクリプトが存在する前にonlyでchownを実行できるということです変更されたファイル。

誰かがそのようなタスクを実行する方法を見つけましたか?

# specify the source directory
source_directory=/Users/jason/Desktop/source

# specify the destination directory
# DO NOT ADD THE SAME DIRECTORY NAME AS RSYNC WILL CREATE IT FOR YOU
destination_directory=/Users/jason/Desktop/destination

# run the rsync command
rsync -avz $source_directory $destination_directory

# grab the changed items and save to an array or temp file?

# loop through and chown each changed file
for changed_item in "${changed_items[@]}"
do
        # chown the file owner and notify the user
        chown -R user:usergroup; echo '!! changed the user and group for:' $changed_item
done
27
Jason M.

Rsyncの--itemize-changes-i)オプションを使用して、次のような解析可能な出力を生成できます。

~ $ rsync src/ dest/ -ai
.d..t.... ./
>f+++++++ newfile
>f..t.... oldfile

~ $ echo 'new stuff' > src/newfile

~ $ !rsync
rsync src/ dest/ -ai
>f.st.... newfile

最初の位置の>文字はファイルが更新されたことを示し、残りの文字は理由を示します。たとえば、ここでsおよびtはファイルサイズとタイムスタンプが変更されたことを示します。

ファイルリストを取得するための迅速で汚れた方法は次のとおりです。

rsync -ai src/ dest/ | egrep '^>'

明らかに、より高度な解析がよりきれいな出力を生成する可能性があります:-)

--itemize-changesがいつ導入されたかを調べようとしているときに、この素​​晴らしいリンクに出会いました。非常に便利です。

http://andreafrancia.it/2010/03/understanding-the-output-of-rsync-itemize-changes.html (アーカイブされたリンク)

44
Kyle Smith

-nフラグを-cチェックサムフラグと-iフラグと組み合わせて使用​​します。

# rsync -naic test/ test-clone/
>fcst...... a.txt
>fcst...... abcde.txt
>fcst...... b.txt

この例では、ファイル自体の内容(チェックサムによって決定される)に基づいて、3つのファイルが変更されています。ただし、-nフラグのため、ファイルの同期は行われません

ボーナス

変更されたファイルに対してchownを実行する場合は、sedまたは類似のものを使用してファイルを解析し、xargsを使用して処理します。次に例を示します。

rsync -naic test/ test-clone/ | sed 's/............//' | xargs -I+ Sudo chown root "test-clone/+"
15
JDS

この質問は少し古いですが、追加する価値があると思います:

-i--out-format=%i%n%Lのショートカットです

そして%nはファイル名を意味します(log formatのセクションman rsyncd.conf

追伸rsyncバージョン3.1.0

3
Cychih