rm
命令允许您执行以下操作:
rm -rf --one-file-system /path/to/dir/
如果该目录的内容中安装了其他文件系统,则会出错(跳过删除)。
Python中是否有一个允许我指定类似行为的模块?如果没有,那么强制实施这种约束的替代方案是什么?
答案 0 :(得分:2)
没有任何模块可以帮助您;你必须自己写。
但os
模块提供了编写它所需的一切。*
首先,os.walk
可以遍历整个目录树。您可以os.stat
每个目录,并跳过那些st_dev
与根目录不同的目录,或者您可以os.path.ismount
每个目录并跳过那些真实的目录。
这几乎正是rm
在幕后所做的事情,除了它当然是使用fts
(或其前身之一,在旧系统上)而不是Python函数。
有两个棘手的问题。
首先,与fts
和类似功能不同,os.walk
不会对文件进行统计(或者更糟糕的是, 统计文件,但不会给你结果),因此您必须在每个os.stat
上明确调用dirname
。 (或使用第三方模块,如scandir
,betterwalk
,py-fts
等。
其次,您必须自上而下修剪步行(在自上而下模式下,如果您从dirnames
参数中移除dirs,walk
将无法递归到它们中),但是您在删除目录之前必须自下而上删除文件。使用像fts
这样的API,允许同一次遍历中的访问前和访问后,这不是问题,但os.walk
会让您选择其中一种。
但这应该足以让你开始这个。如果你遇到困难,你可以随时提出一个新问题。
*好吧,os
和os.path
。