我找到了这样的解决方案:
find . -type f ! -newermt '04/29/2018 16:00:00' -exec rm -f {} \;
Run Code Online (Sandbox Code Playgroud)
但我需要动态日期。我的意思不是一个固定的日期,但我将每天在 cron 中使用这个脚本,它应该删除所有文件,在一个月前(以及更多)更改。
谢谢!
根据man find
,您可以使用date
命令识别的字符串。
-较新的XY参考 如果正在考虑的文件的时间戳 X 是成功的 比文件引用的时间戳 Y 新。字母 X 并且 Y 可以是以下任何字母: a 文件引用的访问时间 B 文件引用的诞生时间 c 引用的inode状态变化时间 m 文件引用的修改时间 t 引用被直接解释为时间 某些组合无效;例如,它是无效的 X 为 t。某些组合未实现 所有系统;例如,并非所有系统都支持 B。 如果无效或不受支持的 XY 组合是 指定,会导致致命错误。 时间规格 被解释为 GNU 的 -d 选项的参数 日期。 如果您尝试使用参考文件的出生时间, 并且无法确定出生时间,致命错误 消息结果。如果您指定一个测试,它指的是 正在检查的文件的出生时间,此测试将失败 对于任何出生时间未知的文件。
根据man date
,您可以使用人类可读的短语,例如“一个月前”。有关更多详细信息,请参阅 GNU Coreutils 手册:日期输入格式。
日期字符串 --date=STRING 是一个 大多数自由格式的人类可读日期 细绳 例如“Sun, 29 Feb 2004 16:21:42 -0800”或 “2004-02-29 16:21:42”甚至“下周四”。一个日期字符串 可能包含指示日历日期、时间、时间的项目 区域、星期几、相对时间、相对日期和数字。 空字符串表示一天的开始。日期 字符串格式比这里容易记录的要复杂,但是 在信息文档中有完整的描述。
正如bac0n 所指出的,您可能对find
的-delete
标志感兴趣:
-删除 删除文件; 如果删除成功,则为 true。如果 删除失败,会发出错误消息。如果-删除 失败,find 的退出状态将是非零的(当它 最终退出)。使用 -delete 自动转 在`-depth'选项上。 警告:不要忘记 find 命令行是 评估为表达式,因此首先将 -delete make find 尝试删除起始位置下方的所有内容 您指定的点。测试 find 命令行时 您以后打算与 -delete 一起使用,您应该 明确指定 -depth 以避免以后 惊喜。因为 -delete 意味着 -depth,你不能 一起使用 -prune 和 -delete 很有用。 与 -ignore_readdir_race 选项一起,找到 在这种情况下将忽略 -delete 操作的错误 读取父目录后文件已消失: 它不会输出错误诊断,并且返回 -delete 操作的代码将为真。
因此,您需要的命令可能类似于:
find -type f \! -newermt "last month" -delete
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
839 次 |
最近记录: |