我有这个find命令来获取在过去50秒内修改的所有文件,这些文件与最后1000个字符中的以下正则表达式hell\d
匹配。
我使用tail来获取最后1000个字符以加快搜索速度,因为要检查的文件很大(平均3GB)。
find /home/ouhma -newermt '50 seconds' -type f |
while read fic; do
if tail -c 1000 "${fic}" | LANG=C LC_ALL=C grep -Pq 'hell\d'; then
echo "${fic}"
fi
done
使用-exec
参数替换那个丑陋的循环并更快地检索结果是可行的吗?
这有效,但我不知道它是否是最好的方法:
find /home/ouhma -newermt '50 seconds' -type f -exec bash -c 'LANG=C LC_ALL=C grep -Pq "hell\d" <(tail -c 1000 "{}") && echo "{}"' \;
答案 0 :(得分:1)
多个-exec
操作可以相互关联,如果前一个-exec
成功,则将运行一个-exec
,即-exec
运行的命令将返回退出状态0。
执行:
find /home/ouhma -type f -newermt '50 seconds' -exec env LC_ALL=C \
bash -c 'grep -Pq "hell\d" <(tail -c 1000 "$1")' _ {} \; -exec echo {} \;
由于您只是打印文件名,这就足够了:
find /home/ouhma -type f -newermt '50 seconds' -exec env LC_ALL=C \
bash -c 'grep -Pq "hell\d" <(tail -c 1000 "$1") && echo "$1"' _ {} \;