我使用shutil.rmtree
删除目录,但是在该树中创建文件的其他进程(我无法控制)无法创建文件,因为目录不存在。有没有像shutil.rmtree
那样容易删除文件但保留目录结构的东西?
答案 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,以便您使用unlinkat
或fchdir
。
答案 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)