所以,我有一个包含很多文件的文件夹,它们是第二次生成的,需要保存在我只能在 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 {} +