Python 用于查找和删除最旧文件的脚本,直到达到空闲 HDD space 阈值
Python script to find and delete oldest files until free HDD space threshold is met
我完全是 Python 的新手,尽管我已经进行了一些搜索(并找到了一些很好的答案),但我仍然无法获得本应包含的脚本正是这样做才能工作。也就是说,我希望脚本一个一个地删除给定目录中最旧的文件,直到达到 100GiB 可用 space 阈值。我目前收到以下错误:
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
这里的问题是 fstatvfs
将 文件描述符 (整数)作为参数,而不是路径。您应该首先在路径上调用 open
,然后将结果对象的 描述符(通过 fileno()
方法)传递给 fstatvfs
.
此外,另一个不需要先获取 文件描述符 并且可以直接使用路径的选项是调用 os.stat。然后你会想看看 st_size
属性。
fstatvfs requires a file descriptor (as returned by file.fileno()), for a path name you want to use statvfs。
经过一些测试后,当指定的路径不存在时,os.fstatvfs
会抛出此错误。这与文件描述符的内部需求是一致的。
我完全是 Python 的新手,尽管我已经进行了一些搜索(并找到了一些很好的答案),但我仍然无法获得本应包含的脚本正是这样做才能工作。也就是说,我希望脚本一个一个地删除给定目录中最旧的文件,直到达到 100GiB 可用 space 阈值。我目前收到以下错误:
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
这里的问题是 fstatvfs
将 文件描述符 (整数)作为参数,而不是路径。您应该首先在路径上调用 open
,然后将结果对象的 描述符(通过 fileno()
方法)传递给 fstatvfs
.
此外,另一个不需要先获取 文件描述符 并且可以直接使用路径的选项是调用 os.stat。然后你会想看看 st_size
属性。
fstatvfs requires a file descriptor (as returned by file.fileno()), for a path name you want to use statvfs。
经过一些测试后,当指定的路径不存在时,os.fstatvfs
会抛出此错误。这与文件描述符的内部需求是一致的。