我正在使用 rsync 将上传到外部系统的文件移动到内部系统。但是,我最近有人上传了两个同名的不同文件。这意味着他们有一个来自 Month1 的文件和一个来自 Month2 的文件,但两者都被命名为mylog.csv。
我目前正在使用 rsync 在目录之间移动它们,它会看到更改并覆盖之前的上传。
rsync -rutv --remove-source-files /external/intake/ /internal/intake/
外部路径确实包含其他子目录,即:
/external/intake/project/user/(additional directories they may build while uploading files)
我想做的是时间戳文件,因为它们在目录之间移动。这样,如果使用复制时间戳复制它们,我至少会看到其中有两个。如果我能得到类似20201009:0800-mylog.csv
and的结果202001009:0810-mylog.csv
。移动后的完整路径将类似于:
/external/intake/project/user/(possible additional directories)/$time-file.txt
rsync 不支持和挂钩或重命名结构,但我认为你有几个选择。
选项 1——纯 rsync
如果您愿意稍微更改输出格式,则可以为每次移动创建一个新目录,并带有时间戳。当你有类似的东西
您可以通过执行类似
rsync -rutv --remove-source-files /external/intake/ /somedir/newtime --link-dest="/somedir/oldtime" --compare-dest="/somedir/oldtime"
. 由此产生的结构将是由于这些链接,您不必使用任何额外的磁盘,因此您可以避免快速爆炸大小,但这与您确切要求的有点不同。
选项 2——重击
这将完全按照您的要求执行,但不会使用 rsync。你会错过与 rdiff 相关的加速,但由于你并没有真正使用它,它应该不会影响任何事情。
这是一个简短的 bash 脚本,应该按照您的需要执行。它应该完全按照您的要求复制行为。
它非常丑陋,但它有效。对于它的价值,这只是一个骨架。我在非常有限的情况下对其进行了测试,并确保它在使用前一直有效。