You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

find命令! -newermt参数无效,如何排除指定日期列文件?

解决find命令排除指定创建日期文件的问题

你的问题出在对-newermt参数的逻辑理解上,直接叠加多个! -newermt会导致筛选条件完全偏离预期。咱们一步步来修正:

核心问题分析

! -newermt "YYYY-MM-DD"的实际含义是文件的修改时间不晚于指定日期的0点,也就是文件时间≤该日期。你之前的命令相当于要求文件同时满足≤2019-09-17、≤2019-08-25、≤2019-05-31、≤2019-06-30,最终只会筛选出早于2019-05-31的文件,这显然和你想要排除特定日期文件的需求不符。

正确的命令写法

要排除恰好创建于某一天的文件,需要先定义该日期的完整时间区间(从当天0点到次日0点),然后排除落在这个区间内的文件。针对你的需求——排除2019-09-18和2019-01-20的文件,命令如下:

find /home/ubuntu/ -maxdepth 1 -type f ! \( -newermt "2019-09-18" ! -newermt "2019-09-19" \) ! \( -newermt "2019-01-20" ! -newermt "2019-01-21" \)

命令细节解释

  • -newermt "2019-09-18" ! -newermt "2019-09-19":匹配修改时间在2019-09-18 00:00:00到2019-09-19 00:00:00之间的文件,也就是当天创建/修改的文件。
  • ! \( ... \):对括号内的条件取反,也就是排除这个区间内的文件(括号是为了保证逻辑优先级,避免条件混乱)。
  • 两个! \( ... \)用find默认的逻辑与连接,就会同时排除9月18日和1月20日的文件。

验证你的示例文件

针对你给出的示例文件:

  • 1.txt(2019-09-18):会被第一个! \( ... \)条件排除
  • 2.txt(2019-09-17):不在任何排除区间内,会被正常列出
  • 3.txt(2019-05-19):不在任何排除区间内,会被正常列出
  • 4.txt(2019-01-20):会被第二个! \( ... \)条件排除

最终输出正好是你期望的2.txt和3.txt。

额外注意

如果你的系统和文件系统支持**文件创建时间(birth time)**而非修改时间,可以把-newermt换成-newerBt(部分Linux发行版需要ext4等支持创建时间的文件系统),命令逻辑完全一致。

内容的提问来源于stack exchange,提问作者vivek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:01:06