shutil.rmtree只删除文件?

时间:2014-01-10 20:21:06

标签: python

我使用shutil.rmtree删除目录,但是在该树中创建文件的其他进程(我无法控制)无法创建文件,因为目录不存在。有没有像shutil.rmtree那样容易删除文件但保留目录结构的东西?

3 个答案:

答案 0 :(得分:5)

我认为没有内置功能可以执行此操作,但您可以使用os.walk()轻松自行完成:

for dirpath, dirnames, filenames in os.walk(my_directory):
    # Remove regular files, ignore directories
    for filename in filenames:
        os.unlink(os.path.join(dirpath, filename))

答案 1 :(得分:0)

如果你想在一行中完成,并且你有GNU find,外包:

subprocess.check_call(["find", "-H", directory, "!", "-type", "d", "-delete"])

这也有一个优点,即专家经过非常仔细的编码,以避免一些竞争条件,这些竞争条件可能允许同一系统上的恶意进程欺骗您的进程删除不应该拥有的内容。我认为实际上不可能使用os.walk来避免所有这些比赛;您需要一个API,以便您使用unlinkatfchdir

答案 2 :(得分:0)

这样的事情怎么样:

import os

def rm_files_in_tree(dir):
    for root, dirs, files in os.walk(dir):
        for file in files:
            path = os.path.abspath(os.path.join(root, file))
            os.remove(path)