我在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)选项生成可解析的输出,如下所示:
原文链接:https://www.f2er.com/bash/386154.html~ $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(存档链接)