我正在编写一个脚本来从输入文件中读取,该文件包含约 1000 行主机信息。脚本 ssh 到每个主机,cd 到远程主机日志目录并 cat最新的每日日志文件。然后我在本地重定向 cat 日志文件以进行一些模式匹配和统计。
我的程序的简化结构是一个 while 循环,如下所示:
while read host
do
ssh -n name@$host "cd TO LOG DIR AND cat THE LATEST LOGFILE" | matchPattern
done << EOA
$(awk -F, '{print &7}' $FILEIN)
EOA
其中 matchPattern 是一个匹配模式并进行统计的函数。
现在我有两个问题:
1)如何远程查找最新的每日日志文件?最新的日志文件名匹配 xxxx2012-05-02.log 并且是最新创建的,是否可以远程执行 ls 并找到与 xxxx2012-05-02.log 文件名匹配的文件?(我可以在本地执行此操作但会卡住将其附加到 ssh 命令时)我可以想出的另一种方法是
cat 'ls -t | head -1' or
cat $(ls -t | head -1)
但是,如果我将此附加到 ssh,它将列出我本地最新创建的文件名,我们可以将其设置为远程变量,以便 cat 找到正确的文件吗?
2)由于有近 1000 个主机,我想知道我是否可以并行执行此操作(例如一次执行 20 个 ssh,并在前 20 个完成后执行下一个 20),将 & 附加到每个 ssh 似乎不足以完成它。
任何想法将不胜感激!
跟进:大家好,我终于找到了一个糟糕的方法来解决第一个问题:
ssh -n name@$host "cd $logDir; cat *$logName" | matchPattern
其中 $logName 是“今天的 date.log”(2012-05-02.log)。问题是我只能在双引号内使用局部变量。由于我的日志文件以 2012-05-02.log 结尾,并且没有其他文件以这个后缀结尾,我只是cat *2012-05-02.log
在远程机器上盲目地做一个,它会为我找到所需的文件。