我有一个脚本在每个月的 1 号运行。在此脚本中,我想删除上个月第一天之前修改的所有文件。例如。该脚本将于 3 月 1 日运行。我想删除 2 月 1 日之前创建的所有文件。这可能吗?
答案1
使用 shell 脚本:
#!/bin/sh
dir_to_check='/root/temp/somedir'
last_month=$(date -d "-1 month -$(($(date +%d)-1)) days" +%Y-%m-%d)
find "$dir_to_check" ! -newermt "$last_month" -type f -exec rm {} \;
dir_to_check='/root/temp/somedir'
用于搜索文件的目录(希望您没有尝试删除全部上个月之前创建的计算机上的文件)。
last_month=$(date -d "-1 month -$(($(date +%d)-1)) days" +%Y-%m-%d)
- 将变量设置为上个月的第一天。
find "$dir_to_check" ! -newermt "$last_month" -type f -exec rm {} \;
- 搜索修改日期早于上个月第一天的所有文件并将其删除。
答案2
按创建时间查找文件并不是最简单的,但也许上次修改或上次访问的文件也适合您?
最简单但最不准确的方法是运行查找并选择 31 天或更早修改的所有文件。然后,您可以处理 find 生成的文件列表或在 find 命令中执行删除:
- 查找最近更改的文件超过 31 天前:
find <dir> -type f -mtime +31
- 查找并删除最近更改时间超过 31 天的文件:
find <dir> -type f -mtime +31 -exec rm {} \;
要决定访问时间,只需替换-mtime
为-atime
。
要查找 X 天前创建的文件,您可以使用-newerBt <creation_date>
(版本 4.3.3 及更高版本)。该格式可以适应使用访问、修改或改变标准。
- 查找 2018 年 1 月 1 日之前创建的文件:
find <dir> -type f -newerBt 2018-01-01