出于安全考虑,我有一些moves files and directory to /tmp/rmf
rather than deleting them的bash代码。
我正在将代码迁移到Python以添加一些功能。其中一项增加的功能是检查/tmp
上的可用大小,并声明移动的目录可以放在/tmp
中。
使用os.statvfs检查可用空间,但如何衡量移动目录的磁盘使用情况?
我可以使用du
调用subprocess
,或者递归遍历目录树并对每个文件的大小求和。哪种方法会更好?
答案 0 :(得分:0)
我想你可能想重新考虑你的策略。有两个原因:
检查是否可以移动文件,断言可以移动文件,然后移动文件为操作提供内置竞争条件。在您声明之后但在移动文件之前,会在/ tmp /中创建一个大文件.. Doh。
跨文件系统移动文件将导致大量开销。这就是为什么在OSX上每个卷都有自己的“Trash”目录。您只需创建一个指向现有数据的新inode,而不是移动组成文件的块。
我会考虑文件需要多长时间以及文件使用者的可见性。如果它是在后端发生的所有自动化事件 - 将文件重命名为“隐藏”它来自计算机和人类消费者在大多数情况下很容易并且具有作为原子操作的额外好处)
偶尔扫描文件系统中的“旧”文件,以便在一段宽限期后剔除它们。没有戏剧性。还可以更轻松地恢复文件,因为它只是重命名还原。
答案 1 :(得分:-1)
这应该可以解决问题:
import os
path = 'THE PATH OF THE DIRECTORY YOU WANT TO FETCH'
os.statvfs(path)