我有多个目录,它们的内容重叠。有时文件完全相同,有时名称相同但内容不同,有时名称相同的文件内容不同。我按如下方式合并目录:
$ rsync -aicPb --remove-source-files SOURCE-DIR/ TARGET-DIR/
此命令几乎完全符合我的要求。问题是文件扩展名未保留。即,参数-b
导致TARGET-DIR/pictureA.jpg
重命名为TARGET-DIR/pictureA.jpg~
,而SOURCE-DIR/pictureA.jpg
要复制到TARGET-DIR/
。
rsync
重命名重复文件时,有没有办法保留文件扩展名?例如,TARGET-DIR/pictureA.jpg
应重命名为TARGET-DIR/pictureA~.jpg
。
您可能需要使用单独的程序来“修复”文件名。以下是 bash 中的一个例子:
它假定您要重命名所有以 结尾的文件
~
。如果不是,请--suffix
在 rsync 中使用以设置唯一后缀。文件名与正则表达式 匹配\.(...)~$
,即末尾的一个点、3 个字符和一个波浪号。由于 ,这 3 个字符被捕获到()
bash 内置数组 中BASH_REMATCH
。新文件名由旧名称构建,从.???~
末尾删除 glob 模式,并添加新的波浪号、点和捕获的扩展名。-e
测试新文件是否已存在,否则将重命名。经过进一步搜索,我找到了一个名为rclone的工具,它可以完成我想要的功能。对于那些感兴趣的人,下面是我用来实现我想要的功能的命令: