3

为了安全起见,我有一些 bash 代码将文件和目录移动到/tmp/rmf而不是删除它们。

我正在将代码迁移到 Python 以添加一些功能。添加的功能之一是检查可用大小/tmp并断言移动的目录可以适合/tmp.

使用os.statvfs检查可用空间,但如何测量移动目录的磁盘使用情况?

我可以调用duusing subprocess,也可以递归地遍历目录树并对每个文件的大小求和。哪种方法会更好?

4

2 回答 2

0

我认为您可能需要重新考虑您的策略。两个原因:

  1. 检查您是否可以移动文件,断言您可以移动文件,然后移动文件为操作提供了内置的竞争条件。在您声明之后但在您移动文件之前,在 /tmp/ 中创建了一个大文件.. Doh。

  2. 跨文件系统移动文件将导致大量开销。这就是为什么在 OSX 上每个卷都有自己的“垃圾”目录。您只需创建一个指向现有数据的新 inode,而不是移动组成文件的块。

我会考虑文件需要可用多长时间以及文件消费者的可见性。如果这一切都是在后端发生的自动化事情 - 在大多数情况下,重命名文件以“隐藏”它对计算机和人类消费者来说很容易,并且具有作为原子操作的额外好处)

偶尔扫描文件系统中的“旧”文件以在一些宽限期后剔除和 rm 它们。没有剧情。也使恢复文件更容易,因为它只是一个重命名来恢复。

于 2013-05-25T10:39:52.560 回答
-1

这应该可以解决问题:

import os
path = 'THE PATH OF THE DIRECTORY YOU WANT TO FETCH'
os.statvfs(path)
于 2014-12-04T17:21:26.000 回答