按日期删除大量文件的最佳方法

按日期删除大量文件的最佳方法

所以,我有一个包含很多文件的文件夹,它们是第二次生成的,需要保存在我只能在 90 天后删除它们,所以正如你可能猜到的,我会生成大量文件,然后在 90 天后我能够删除那些超过 90 天的文件。但是,我陷入了搜索这些文件的部分,因为我有很多文件,系统抱怨列表太大,因此我无法删除它们。

最好的解决方案是什么让我可以通过这个?文件名采用时间戳模式,因此我可以从它开始,但我想确保所有文件在一段时间后都被删除......

我尝试过这些方法

rm -rf *
find /path/to/files/ -type f -name '*.ts' -mtime +90 -exec rm {} \; 

我还设法创建了一个按文件名删除的脚本,但使用这种方法我不能保证所有文件都被删除。

答案1

如果文件在初始创建后没有被修改,则如果超过 90 天没有修改,您可以将其删除:

find /path/to/folder ! -type d -mtime +90 -delete

或者

find /path/to/folder ! -type d -mtime +90 -exec rm -f {} +

(对于find不支持该-delete操作的版本)。

出于安全考虑,您应该首先使用此命令的非破坏性版本,并确保它将准确删除您想要删除的内容,特别是如果您打算通过cron或类似的方式自动执行此操作,例如:

find /path/to/folder ! -type d -mtime +90 -print

请注意,-mtime +90检查修改时间文件和返回真的如果向下舍入为整数天数(86400 秒单位)的年龄为严格地大于 90,因此匹配上次修改时间为 91 天或更早的文件。

答案2

免责声明:我是当前作者或生皮右旋) (看https://github.com/raforg/rawhide)。

生皮右旋)你可以这样做:

rh -UUU /path/to/files 'f && "*.ts" && old(90*days)'

-UUU取消链接/删除/删除匹配的文件。

/path/to/files是一个搜索路径。

剩下的就是搜索条件。

f匹配常规文件。

"*.ts"匹配名称以 . 结尾的文件.ts

old(90*days)匹配至少 90 天前最后修改的文件。

答案3

根据前面的答案,如果需要删除目录,可以使用选项-maxdepth

预览您要删除的内容:

find . -maxdepth 1 -mtime +1 -print

将它们全部删除:

find . -maxdepth 1 -mtime +1 -exec rm -rf {} +

相关内容