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

如何修改Shell脚本实现仅复制指定时间范围含指定字符串的最大日志文件

修改后的Shell代码:仅复制符合条件的最大文件

要实现只复制符合时间范围且包含指定字符串的最大文件,可以在原有筛选逻辑基础上,增加按文件大小排序并取最大值的步骤,具体代码如下:

基础版本(文件名无空格时可用)

find /logpath -type f -newermt "$Start-Time" ! -newermt "$End_Time" -exec grep -l "$string" {} + | xargs -I {} stat -c "%s %n" {} | sort -nr | head -n1 | awk '{print $2}' | xargs -I {} cp {} /destination

安全版本(兼容含空格/特殊字符的文件名)

如果目标文件可能包含空格、特殊字符,建议用null分隔符避免解析错误:

find /logpath -type f -newermt "$Start-Time" ! -newermt "$End_Time" -exec grep -lZ "$string" {} + | xargs -0 stat -c "%s %n" {} | sort -nr | head -n1 | awk '{sub(/^[^ ]+ /, ""); print}' | xargs -I {} cp {} /destination

代码分步说明

  • find ... -exec grep -l[Z] "$string" {} +:保留原有筛选逻辑,找出指定时间范围内且包含目标字符串的文件;-Z用于输出null分隔的文件名,适配特殊字符场景。
  • xargs -[0] stat -c "%s %n" {}:对每个筛选出的文件,用stat输出文件大小(%s)和完整文件名(%n);-0对应grep -Z的null分隔规则,确保文件名解析准确。
  • sort -nr:按文件大小倒序排序,最大的文件会排在结果第一行。
  • head -n1:只保留排序后的第一行,也就是符合条件的最大文件。
  • awk ...:提取该行中的文件名——基础版本用$2直接取值(无空格时有效);安全版本用sub去掉开头的大小数值部分,确保完整提取含空格的文件名。
  • xargs -I {} cp {} /destination:将最终筛选出的最大文件复制到目标目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:12:47