如何根据返回的不区分大小写的delta删除文件系统中的文件?

时间:2013-09-11 07:12:26

标签: python dropbox dropbox-api

我正在尝试编写代码以在Dropbox Core API python SDK中完成此特定情况documented

  

[path,nil]:表示Dropbox上的路径中没有文件/文件夹。要更新您要匹配的本地状态,请删除路径中的任何内容,包括任何子项(您有时也会为子项获取“删除”增量条目,但这不能保证)。如果您的本地州在路径上没有任何内容,请忽略此条目。

API指出返回的[path]不区分大小写。

  

请记住:Dropbox以不区分大小写但保持大小写的方式处理文件名。为此,上面的路径字符串是实际路径的低级版本。元数据dicts具有原始的,保留大小写的路径。

如果我不知道路径的大小写保留版本,如何从我的系统中删除有问题的文件或目录?

如果它是相关的,我的操作系统是Linux,虽然我希望得到一个可以在Windows上运行的解决方案,如果可能的话。

2 个答案:

答案 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是路径名。