linux bash:/usr/bin/find:参数列表太长

wz8daaqr  于 2023-08-03  发布在  Linux
关注(0)|答案(2)|浏览(146)

我有27 000个日志文件,需要在GoAccess中一次性解析它们。每次我运行这个命令

goaccess /home/goaccess/part/2/*.log --log-format='%^ %dT%t.%^ %v %h:%^ %^ %^ %T %^ %s %^ %^ %b "%r" "%u" %k %K %^' -o /var/www/html/index.html --date-format=%Y-%m-%d --time-format=%T

字符串
它说
bash:/usr/bin/find:参数列表太长
我已经尝试了chatgpt和bard建议的所有东西,仍然是同样的问题。

nkhmeac6

nkhmeac61#

试试这个:

find /home/goaccess/part/2/ -name \*\.log -print0 | xargs -0 -I goaccess {} --log-format='%^ %dT%t.%^ %v %h:%^ %^ %^ %T %^ %s %^ %^ %b "%r" "%u" %k %K %^' -o /var/www/html/index.html --date-format=%Y-%m-%d --time-format=%T

字符串
这应该使用xargs(专为此类问题设计)将goaccess命令批处理到符合arg列表限制数量的组中,并允许处理任意数量的文件。有关更多详细信息和示例,请参见man xargs。

n9vozmp4

n9vozmp42#

你可以尝试一些事情。
首先切换到日志目录:

cd /home/goaccess/part/2 && goaccess *.log --log-format='%^ %dT%t.%^ %v %h:%^ %^ %^ %T %^ %s %^ %^ %b "%r" "%u" %k %K %^' -o /var/www/html/index.html --date-format=%Y-%m-%d --time-format=%T

字符串
但是对于27k文件来说,这可能是不够的。
如果文件名对你的goaccess调用不重要(我不知道它是否重要),那么管道日志内容就可以工作:

find /home/goaccess/part/2/ -name '*.log' -exec cat {} + | goaccess - --log-format='%^ %dT%t.%^ %v %h:%^ %^ %^ %T %^ %s %^ %^ %b "%r" "%u" %k %K %^' -o /var/www/html/index.html --date-format=%Y-%m-%d --time-format=%T


作为最后手段:goaccess似乎支持在配置文件中设置输入日志文件,但不清楚是否可以设置多个。如果是这样,您可以生成一个配置文件,其中包括所有28k日志文件。

相关问题