Python & rsync: 如何处理相同的文件名?

Python & rsync: how to deal with identical filenames?

我正在使用 rsync 自动将文件复制到远程服务器。由于 space 在我的内部硬盘上受到限制,我还使用 rsync 在成功上传后将这些文件(即使用 --remove-source-files)随后移动到外部硬盘。

这些文件是使用远程相机捕获应用程序拍摄的照片,该应用程序按顺序命名文件(DSC0001.JPGDSC0002.JPG 等)。该序列似乎特定于 "session":如果我退出远程捕获应用程序并再次启动它,它将从 1 开始(假设文件夹为空)。

我在 Python 中编写了所有脚本(2.6,因为 运行 在非常旧的 MacBook 上),所以如果有任何崩溃,它会再次重新启动。现在,问题来了:如果远程捕获应用程序崩溃并重新启动,并且 rsync 刚刚完成所有文件的上传和移动,那么 JPG 编号将从 1 重新开始。随后,当 rsync 将再次上传和移动新文件,将出现名称冲突,因为 DSC0001.JPG 已经存在于外部硬盘上。

From what I gatherrsync 将简单地覆盖副本,除非我指定 --ignore-existing。但在那种情况下,新的 DSC0001.JPG(以及所有后续图像)不再同步。有没有办法使用 rsync 来解决这个问题 post I link 上面错过了,或者最好在 Python 脚本中处理这个问题(如果是的话, 如何?)?谢谢!

在执行 rsync 之前,我最终采用了一种按创建日期和时间重命名文件的方法(因此它始终是唯一的)。在 https://codereview.stackexchange.com/a/113684 找到答案:

import glob
from PIL import Image  # Python Image Library
from PIL.ExifTags import TAGS

def get_exif(fn):
    ret = {}
    i = Image.open(fn)
    info = i._getexif()
    for tag, value in info.items():
        decoded = TAGS.get(tag, tag)
        ret[decoded] = value
    return ret

allImageFiles = glob.glob(pathToFolder + "*.JPG")
for imageFile in imagefiles:
    number = 0  # for duplicate check below
    time = get_exif(imageFile)["DateTimeOriginal"]
    time = time.replace(":", "")
    time = time.replace(" ", "_")
    new_name = pathToTempSyncFolder + "DSC_" + time + ".JPG"
    if new_name == imageFile:  # if file already has desired name, end current iteration of 'for'-loop (i.e., do not rename)
        print(new_name, "already ok")
        continue  
    while os.path.exists(new_name):  # safety check for duplicates
        number += 1
        new_name = pathToFolder + "DSC_" + time + "_MAYBE_DUPLICATE_"+str(number)+".JPG"
    os.rename(imageFile, new_name)  # RENAME