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

Shell脚本求助:归档2天前同名目录执行tar命令报错

问题解决

错误原因

你用单引号包裹find /apps/logs/* -mtime +2,单引号会将内容视为纯字符串,不会执行find命令。循环变量x的值因此变成整个命令字符串find /apps/logs/* -mtime +2,传给tar时,tar会把这些单词当作选项/参数解析,导致冲突报错。

修正后的脚本

方法1:使用命令替换(推荐写法)

for x in $(find /apps/logs -type d -mtime +2); do
  echo "Tarring $x.."
  tar cvzf "${x}.tar.gz" "$x"
done

关键修改点

  • 将单引号替换为$()(也可用反引号`,但$()可读性更强),让Shell执行find命令并返回结果作为循环列表
  • 添加-type d确保只处理目录,避免误操作文件
  • 给变量套双引号"$x"和"${x}.tar.gz",防止目录名含空格时出现解析错误

方法2:用find的-exec直接处理(更安全)

如果担心目录名包含特殊字符,推荐用find的-exec选项,彻底避免循环变量的解析问题:

find /apps/logs -type d -mtime +2 -exec tar cvzf "{}.tar.gz" "{}" \;

这里{}代表find找到的每个目录,\;标记-exec命令的结束。

额外说明

  • -mtime +2表示修改时间超过48小时(24*2)的目录,符合你的需求
  • 若只想处理/apps/logs下的一级目录(不递归子目录),可添加-maxdepth 1参数:
find /apps/logs -maxdepth 1 -type d -mtime +2 -exec tar cvzf "{}.tar.gz" "{}" \;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:18:12