我正在尝试编写代码以在Dropbox Core API python SDK中完成此特定情况documented。
[path,nil]:表示Dropbox上的路径中没有文件/文件夹。要更新您要匹配的本地状态,请删除路径中的任何内容,包括任何子项(您有时也会为子项获取“删除”增量条目,但这不能保证)。如果您的本地州在路径上没有任何内容,请忽略此条目。
API指出返回的[path]
不区分大小写。
请记住:Dropbox以不区分大小写但保持大小写的方式处理文件名。为此,上面的路径字符串是实际路径的低级版本。元数据dicts具有原始的,保留大小写的路径。
如果我不知道路径的大小写保留版本,如何从我的系统中删除有问题的文件或目录?
如果它是相关的,我的操作系统是Linux,虽然我希望得到一个可以在Windows上运行的解决方案,如果可能的话。
答案 0 :(得分:1)
如果您需要能够从较低的套管路径恢复原始套管的路径(例如,对于本地区分大小写的文件系统),一种解决方案是保持降低路径到原始路径客户端的映射侧。具体的实现细节取决于您,但任何简单的键值存储都可能完成这项工作。
然后,当您获得其中一个删除时,可以使用此映射查找原始路径并相应地处理它。
答案 1 :(得分:1)
我知道这有点晚了,但我偶然发现了同样的问题并想出了一个不同的解决方案。也许看到这个的人会喜欢这种方法。
由于我的API仅用于Linux服务器,因为删除对我来说相当罕见,我依靠linux find命令来帮助我。
# LINUX ONLY
cmd = "find {0} -iwholename '{1}'".format(basepath, caseInsensitivePath)
with os.popen(cmd) as f:
caseSensitivePath = f.read()[:-1] # -1 to remove the '\n'
# error if more than 1 line
if caseSensitivePath.find('\n') != -1:
print "Found multiple results including: \n", caseSensitivePath
msg = "[!]ERROR Could not delete {0}. Multiple case-sensitive results exist".format(caseInsensitivePath)
raise Exception(msg)
else:
return caseSensitivePath
basepath 是查找的基本路径。我建议找一种比root'/'更精确的方法。在我的情况下,我已经在sync文件夹中有一个路径列表,所以我能够进行如下比较:
caseInsensitivePath = caseInsensitivePath.lower()
# find basepath
basepath = assets_root
for folder in self.myDict.keys():
if caseInsensitivePath.lower().startswith(folder.lower()):
basepath = folder
caseInsensitivePath是路径名。