如何根据文件名模式删除文件?

时间:2018-03-21 11:52:55

标签: linux bash shell unix

我有使用命名约定的文件:

FILE_NAME=$APP_NAME"_"$PARAM_COUNTRY"_"$YYYY"_"$MM"_"$DD".info"

所以在unix中我的文件会像这样创建:

run.sh_JP_2018_03_19.info
run.sh_JP_2018_03_20.info
run.sh_JP_2018_03_21.info
run.sh_AP_2018_03_21.info
run.sh_AP_2018_03_21.info

因此,如果今天的日期是'2018_03_21',我希望有一个命令可以删除早于此日期的文件,其中包含字符串'JP'。即使我在几天后执行它,此命令也应该有效。我该怎么做?

1 个答案:

答案 0 :(得分:2)

此命令:

find -type f -name "run.sh_JP_20[0-9][0-9]_[0-9][0-9]_[0-9][0-9].info" -mtime +1 -delete

将忽略文件名中的已宣布日期,但查找文件的修改日期,并且只查找文件名中的日期格式等大致内容,但如果您不这样做,这在大多数情况下都是足够的有像run.sh_JP_2018_53_79.info这样的名字。

它将删除至少1天的文件。有关-ctime和-atime之类的变体以及可用标志的OS /文件系统,请参阅查找手册。

find的-delete标志适用于Linux / Gnu-find。

从现在起三天,您只需将其修改为-mtime +4 -delete

日期和模式匹配很快就无法维持。