编辑:我看到有人投票结束这个问题,因为“这个问题太宽泛了”,但上次我发帖询问如何做某事时,我被要求提供更多关于我想做什么和为什么要做的细节。所以……赢不了!我只问一个问题:“当本地副本更改时如何操作文件夹的远程副本”。我不是在问如何重命名、重新编号或制作 zip 文件,只是解释这是我作为副本的一部分需要做的事情。如果没有明显(但错误)的答案是“仅使用 rsync”,我真的想不出一个不那么详细的方法。
我想在 Ubuntu 18.04 上根据 Dropbox 文件夹(其他服务也可以添加文件)中完成的上传活动自动复制文件夹。我需要:
- 保持源文件夹不变。
- 如果还没有 - (
find . -name '[[:digit:]]*.mp3'
等) ,则为复制的文件名添加数字前缀 - 清除撇号的文件名(例如使用“ detox ”)。
- 在远程端创建文件夹的 zip。
- 如果将来源文件夹中有任何更改,请在远程副本上重新复制并重新创建 zip 文件夹。
示例:20190203 的 SOURCE 文件夹
apostrophe's.mp3
track01.mp3
zebra 4.mp3
20190203的REMOTE文件夹(处理后)
01-apostrophes.mp3
02-track01.mp3
03-zebra4.mp3
20190302.zip
如果远程用户在一个月后在源文件夹中添加chickens.mp3并删除apostrophe's.mp3,则该过程将通过重新复制和重命名文件夹来更新远程文件夹,并自动重建 zip 文件。
可能上传的所有单个文件都小于 10Mb,因此即使是最慢的连接也不会花费超过 15 分钟来上传任何一个文件,但上传整个文件夹可能需要长达 45 分钟。
我无法根据文件夹大小、文件数量或修改日期检查更改,因为将 zip 文件添加到远程文件夹的操作将更改所有这些。
目前,我有一个每小时 crontab 运行一个包含以下内容的脚本:
SCANDIRS="$(find $BASEDIR -type f -mmin +15 -mmin -45 -printf "%h\\n" | sort -u | xargs -n 1 realpath)"
然后它遍历scandirs并发挥作用,但这可能有很多我没有预见到的问题,每小时只能运行一次,并且不允许更新旧文件夹。
我知道rsync -av --delete
如果只是文件,则使用常规 crontab 会起作用,但我完全不知道如何做我想做的事。复制的文件夹将驻留在同一个本地文件系统上(然后s3 sync
远程获取,如果你想知道!)。
我认为inotifywait可能是一个解决方案,但我不确定如何处理“等到文件夹静止一段时间但允许将来随时更新”的问题。
谢谢你。