您好,我目前正在尝试搜索以 xy_Number 开头且今天(不是最近 24 小时)创建/编辑的日志文件。
我试过:
find /home/USER/logfilesError/ -maxdepth 1 -type f -daystart -mtime -1 print0 | xargs -0 grep - l xy_*
输出:
find: paths must precede expression: print0
我需要结合:
find -maxdepth 1 -type f -daystart -mtime -1
和
ls | grep -E "xy_"
我想要实现的是:
从今天的特定位置搜索日志文件,然后进一步搜索这些文件并输出以 ERROR 开头的行。 (其他行 INFO 和 DEBUG)
因此搜索工作正常,我想在搜索后使用 grep 进一步检查文件以查找包含 ERROR 的文件
grep -rl "ERROR" /home/USER/logfilesError/
如何将它们组合到脚本中?与如果?有人可以帮我弄这个吗?
答案1
为什么使用 grep, find 可以完成这项工作:
find /home/USER/logfilesError/ -maxdepth 1 -type f -name "xy_*" -daystart -mtime -1
答案2
从声音来看,您正在寻找-name
:
find /path -maxdepth 1 -type f -name 'xy_*' -daystart -mtime -1 -exec grep -H ERROR {} +
从man find
:
-name pattern
文件名的基础(删除了前导目录的路径)与 shell 模式匹配。元字符(“*”、“?”和“[]”)与“.”匹配位于基本名称的开头(这是 findutils-4.2.2 中的更改;请参阅下面的标准一致性部分)。要忽略目录及其下的文件,请使用 -prune;请参阅 -path 描述中的示例。尽管事实上包括 Bash 在内的某些 shell 在 shell 模式中赋予了大括号特殊的含义,但大括号并不被认为是特殊的。文件名匹配是使用 fnmatch(3) 库函数执行的。不要忘记将模式用引号引起来,以防止它被 shell 扩展。