You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

find命令printf无法识别转义字符,求今日文件查找优化方案

解决方法:正确使用find的printf与大小写匹配

我来帮你搞定这个问题!你遇到的转义字符失效和格式问题,主要是因为printf的格式字符串没加引号,另外要实现大小写不敏感匹配,用find自带的-iname比shell glob更靠谱。

1. 修复printf转义问题,添加日期与换行

你的原命令里,-printf %p\t%AD没有用引号包裹格式字符串,导致shell直接解析了\t和换行符,而不是把它们传给find处理。只需要把格式字符串用双引号(或单引号)括起来,就能让find正确识别转义序列:

find /folder/jobfolder -type f -iname "rrz*" -mtime 0 -printf "%p\t%AD\n"

这个命令的细节:

  • -iname "rrz*":忽略大小写匹配所有以rrz开头的文件(不管是RRZabc、rrzDef都能匹配),引号必须加,防止shell提前解析*
  • -printf "%p\t%AD\n"%p输出文件完整路径,\t是制表符分隔,%AD输出文件修改日期(YYYY-MM-DD格式),\n强制换行,让每个结果单独占一行

2. 更精确的24小时匹配(可选)

-mtime 0匹配的是从今天0点到现在的文件,如果需要严格匹配过去24小时内修改的文件(比如现在是下午3点,就匹配昨天下午3点到今天下午3点的文件),可以用-mmin -1440(1440分钟=24小时),还能加上%AT显示具体时分秒:

find /folder/jobfolder -type f -iname "rrz*" -mmin -1440 -printf "%p\t%AD %AT\n"

3. 替代方案:用ls辅助格式化(如果偏好ls的输出风格)

如果你觉得find的printf不够直观,也可以用xargs配合ls来输出带日期的结果:

find /folder/jobfolder -type f -iname "rrz*" -mtime 0 | xargs ls -l --time-style=+"%Y-%m-%d %H:%M:%S"

这个命令会输出类似ls -l的格式,包含权限、大小、修改时间和文件路径,时间格式可以自定义。

为什么不推荐原来的find /folder/jobfolder/rrz*

用shell glob(rrz*)传给find的话,shell会先把所有rrz开头的文件/目录展开成参数传给find,如果rrz开头的目录很多,可能会触发命令行长度限制;而且这种方式没法支持大小写不敏感匹配,用-iname更灵活可靠。

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

火山引擎 最新活动