我正在使用rsync
自动将文件复制到远程服务器。由于我的内置硬盘空间有限,我也会使用rsync
随后在成功上传后将这些文件(即使用--remove-source-files
)移动到外部硬盘。
这些文件是使用远程摄像头捕获应用程序拍摄的照片,该应用程序按顺序命名文件(DSC0001.JPG
,DSC0002.JPG
等)。该序列似乎特定于“会话”:如果我退出远程捕获应用程序并再次启动它,它将从1开始(假设文件夹为空)。
我用Python编写了所有脚本(2.6,因为在非常旧的MacBook上运行),所以如果发生任何崩溃,它会重新启动。现在,出现了问题:远程捕获应用程序是否应该崩溃并重新启动,rsync
是否应该刚刚完成上传&移动所有文件,然后JPG编号将再次从1开始。随后,rsync
将再次上传&移动新文件时,会出现名称冲突,因为外部硬盘已经存在DSC0001.JPG
。
From what I gather,rsync
只会覆盖副本,除非我指定--ignore-existing
。但在这种情况下,新的DSC0001.JPG
(和所有后续图像)不再同步。有没有办法使用rsync
解决这个问题,我上面链接的帖子错过了,或者最好在Python脚本中处理这个问题(如果是的话,怎么做?)?谢谢!
答案 0 :(得分:0)
我最终选择了一种按创建日期重新命名文件的方法。在做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