有compile.x86.log
compile.x86.log-1
compile.x86.log-2
compile.x86.log-3
和error.log
error.log_1
error.log_2
error.log_3
等文件想要使用locate命令仅在其中找到compile.x86.log
和error.log
。
到目前为止,我试过
echo $(/usr/bin/locate -ir '^/\([^.][^/]\+/\)\+compile.x86\.log$')
echo $(/usr/bin/locate -ir '^/\([^.][^/]\+/\)\+error\.log$')
采用上述个人方法,搜索/执行时间为0m18.068s。
如何组合上述两个?
另外请提供一些其他更好的解决方案,仅使用locate命令,最好使用locate -b
选项,以便在更短的时间内搜索确切的名称(compile.x86.log和error.log)。
我试过echo $(/usr/bin/locate -i -b "compile.x86.log")
它只执行命令执行时间0m1.887s但在结果中返回compile.x86.log-1
compile.x86.log-2
compile.x86.log-3
而不是仅返回我不想要的compile.x86.log
。
有没有办法在这种方法中grep查找结果只返回(compile.x86.log和error.log)。
答案 0 :(得分:0)
按照你的逻辑,最简单的答案是:
echo $(/usr/bin/locate -ir '^/\([^.][^/]\+/\)\+(compile\.x86|error)\.log$')
其中(compile\.x86|error)
是指“this or this”模式的组合。
否则,使用find
命令会更好:
find -type f -name "compile.x86.log" -o -name "error.log"
答案 1 :(得分:0)
因为locate数据库输出条目作为绝对路径名,并且模式匹配测试适用于整个路径名(通配符*
不特别处理/
),
locate -i '*/compile.x86.log' '*/error.log'
做你想做的事。
顺便说一下,命令周围的echo $(…)
似乎很浪费。