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

设置ADAYS=5后,查询最新.dat文件的脚本无输出,请求排查问题

你的find命令无输出的可能原因及解决办法

咱们一步步排查你遇到的问题,命令没产生结果通常是这几个原因:

  • 变量ADAYS的有效性问题
    如果你是在终端里先定义ADAYS=5再执行命令,那没问题;但如果是在脚本里,要确保变量能被find命令读到——比如如果脚本里是用子shell执行的(比如用括号包起来),那需要先export变量:export ADAYS=5,不然子进程拿不到这个值,find会变成-mtime +,相当于无效参数,自然没结果。另外定义变量时别加空格,比如ADAYS=5(不要写成ADAYS= 5或者ADAYS =5)。

  • -mtime的逻辑搞反了
    你设置的-mtime +${ADAYS}是找修改时间超过5天前的文件(准确说是修改时间距离现在超过5*24小时,也就是第6天及更早的文件)。如果你的需求是找最近5天内的最新文件,那应该用-mtime -${ADAYS}(减号)。如果当前目录里没有超过5天的.dat文件,命令自然不会输出任何内容。你可以先单独执行find . -type f -name "*.dat" -mtime +5看看有没有匹配的文件,验证这一点。

  • 权限或文件路径问题
    首先确认你对/app/test/clean.log有写入权限:如果这个文件还没创建,你需要有/app/test目录的写权限;如果已经存在,要确保有修改权限。可以先手动执行touch /app/test/clean.log试试能不能创建,或者echo "test" >> /app/test/clean.log看能不能写入。另外,确认/app/test目录下确实存在.dat文件,先执行find . -type f -name "*.dat"看看有没有文件返回。

  • -exec的写法小优化(非无输出原因)
    你的-exec ls -l >> /app/test/clean.log {} \;其实每次找到一个文件就会执行一次ls并追加日志,这没问题,但可以优化成更高效的写法:-exec ls -l {} + >> /app/test/clean.log(用+代替;),这样会把所有找到的文件一次性传给ls,减少进程创建次数。

另外,你可以把命令改成这样来调试:cd /app/test && find . -type f -name "*.dat" -mtime +${ADAYS} -print,先看find能不能找到文件,如果有输出,再看ls写入日志的问题;如果没输出,就是find没匹配到文件,回到前面的原因排查。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:39:58