我需要将本地文件夹的内容与AWS S3存储桶进行比较,以便在存在差异的情况下对本地文件执行脚本。 这个想法是本地文件(图片)被加密并上传到S3。上传完成后,我删除图片的加密副本以节省空间。第二天,新文件将添加到本地文件夹中。我需要在本地文件夹和S3存储桶之间检查哪些图片已经加密和上传,这样我才会加密新添加的图片,而不是全部加密。我有一个脚本在两个本地文件夹之间执行此操作,但我正在努力调整它,以便在本地文件夹和S3存储桶之间执行比较。 感谢任何可以提供帮助的人。
以下是我目前用于图片排序,加密和备份到S3的实际脚本:
perl / volume1 / Synology / scripts / Exiftool / exiftool'-createate
perl / volume1 / Synology / scripts / Exiftool / exiftool'-model =缺少相机模型'-r -if'(非$ model)' - overwrite_original -r / volume1 / photo /“input”/ --ext .DS_Store -i“@eaDir”
perl / volume1 / Synology / scripts / Exiftool / exiftool' -Directory
cd / volume1 / Synology / Pictures /“图片Glacier备份”/“Glacier的压缩加密图片”/ post_2016 /&& (cd / volume1 / Synology / Pictures / Pictures / post_2016 /; find.-type d!-name。)| xargs -i mkdir -p“{}”
而IFS = read -r文件; do / usr / bin / gpg --encrypt -r xxx@yyy.com / volume1 / Synology / Pictures / Pictures / post_2016 / ** / / / $(basename“$ file”.gpg) ;完成< <(comm -23<(find / volume1 / Synology / Pictures / Pictures / post_2016 -type f -printf'%f.gpg \ n'| sort)<(find / volume1 / Synology / Pictures /“Pictures Glacier备份“/”Glacier的压缩加密图片“/ post_2016 -type f -printf'%f \ n'| sort))
rsync -zarv --exclude = @ eaDir --include =“ /” - include =“ .gpg”--exclude =“”/ volume1 / Synology / Pictures /图片/ post_2016 / / volume1 / Synology /图片/“图片Glacier备份”/“Glacier的压缩加密图片”/ post_2016 / find / volume1 / Synology /图片/图片/ post_2016 / -name“ .gpg”-type f -delete
/ usr / bin / aws s3 sync / volume1 / Synology / Pictures /“图片Glacier备份”/“Glacier的压缩加密图片”/ post_2016 / s3:// xyz / Pictures / post_2016 / --exclude“< em>“ - include” .gpg“--sse
答案 0 :(得分:0)
持续比较本地和远程文件夹是低效的,特别是当对象数量增加时。
更好的流程是:
AWS Command-Line Interface (CLI)有一个aws s3 sync
命令,可以很容易地将新的/修改过的文件复制到Amazon S3存储桶,但如果您有数千个文件,这可能会很慢。