Bash
如何從 rsync 輸出已更改文件的列表?
我在 bash 腳本中使用 rsync 來保持文件在一些伺服器和 NAS 之間同步。我遇到的一個問題是嘗試生成在 rsync 期間更改的文件列表。
這個想法是,當我執行 rsync 時,我可以將已更改的文件輸出到文本文件中 - 更希望記憶體中有一個數組 - 然後在腳本存在之前,我可以僅對更改的文件執行 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
您可以使用 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(存檔連結)