在Python中从单个文件系统中删除dir内容

时间:2013-11-26 22:09:39

标签: python

rm命令允许您执行以下操作:

rm -rf --one-file-system /path/to/dir/

如果该目录的内容中安装了其他文件系统,则会出错(跳过删除)。

Python中是否有一个允许我指定类似行为的模块?如果没有,那么强制实施这种约束的替代方案是什么?

1 个答案:

答案 0 :(得分:2)

没有任何模块可以帮助您;你必须自己写。

os模块提供了编写它所需的一切。*

首先,os.walk可以遍历整个目录树。您可以os.stat每个目录,并跳过那些st_dev与根目录不同的目录,或者您可以os.path.ismount每个目录并跳过那些真实的目录。

这几乎正是rm在幕后所做的事情,除了它当然是使用fts(或其前身之一,在旧系统上)而不是Python函数。

有两个棘手的问题。

首先,与fts和类似功能不同,os.walk不会对文件进行统计(或者更糟糕的是, 统计文件,但不会给你结果),因此您必须在每个os.stat上明确调用dirname。 (或使用第三方模块,如scandirbetterwalkpy-fts等。

其次,您必须自上而下修剪步行(在自上而下模式下,如果您从dirnames参数中移除dirs,walk将无法递归到它们中),但是您在删除目录之前必须自下而上删除文件。使用像fts这样的API,允许同一次遍历中的访问前和访问后,这不是问题,但os.walk会让您选择其中一种。

但这应该足以让你开始这个。如果你遇到困难,你可以随时提出一个新问题。


*好吧,osos.path