用于查找和删除最旧文件的Python脚本,直到满足可用的HDD空间阈值

时间:2015-03-12 01:33:08

标签: python file python-2.7 delete-file

我对Python来说绝对是全新的,虽然我已经做了一些搜索(并且已经找到了一些好的答案)但是我仍然遇到问题而且还有问题。 ; s应该这样做才能发挥作用。也就是说,我希望脚本能够逐个删除给定目录中最旧的文件,直到满足100GiB可用空间阈值。我目前收到以下错误:

  File "./freespace.py", line 18, in <module>
    free_space_up_to(107374182400, "/home/hindenpeter/Downloads/")
  File "./freespace.py", line 13, in free_space_up_to
    statv=os.fstatvfs(rootfolder)
TypeError: an integer is required

尝试运行此脚本时:

#!/usr/bin/python2.7

import os
def files_to_delete(rootfolder):
    return sorted(
        (os.path.join(dirname, filename)
         for dirname, dirnames, filenames in os.walk(rootfolder)
         for filename in filenames),
            key=lambda fn: os.stat(fn).st_mtime),reversed==True
def free_space_up_to(free_bytes_required, rootfolder):
    file_list=files_to_delete(rootfolder)
    while file_list:
        statv=os.fstatvfs(rootfolder)
        if statv.f_bfree*statv.f_bsize >= free_bytes_required:
            break
        os.remove(file_list.pop())

free_space_up_to(107374182400, "/home/hindenpeter/Downloads/")

所以我正在寻找帮助让这个工作正常工作(也就是说,错误意味着什么是真棒的翻译!),或者也许是一个全新的脚本,可以做我喜欢的事情

供参考,这些是我发现的与我的问题最相关的帖子: Delete oldest files at full disk Find the oldest file (recursively) in a directory

3 个答案:

答案 0 :(得分:0)

这里的问题是fstatvfs文件描述符(整数)作为参数,而不是路径。您应首先在路径上调用open,然后将生成的对象的描述符(通过fileno()方法)传递给fstatvfs

另外,另一个不需要首先获取文件描述符并且可以直接使用该路径的选项将调用os.stat。然后,您需要查看st_size属性。

答案 1 :(得分:0)

fstatvfs需要一个文件描述符(由file.fileno()返回),以获取您要使用的路径名statvfs

答案 2 :(得分:0)

执行某些测试后,os.fstatvfs在指定的路径不存在时抛出此错误。这与文件描述符的内部需求是一致的。