在三个不同的unix服务器中查找特定文件 我是shell脚本的新手,我试过这个,但它无法正常工作
servers="server1 server2 server3"
for e in $servers
do
ssh $e find /path/to/dir -type f -name -exec grep -i "WORD-TO-FIND" {} \; -print >$log
echo " $log file."
done
请帮我解决这个问题 提前致谢
答案 0 :(得分:0)
我不确定我是否理解你想要实现的目标。根据您的代码判断,我假设您要在特定目录中搜索具有给定名称的文件,如果它们包含某个文本字符串,则将包含此文本的行写入日志文件。
如果是这种情况,那么以下应该完成这项工作:
#!/bin/bash
log=/var/tmp/filefind.log
servers="server1 server2 server3"
for e in $servers
do
ssh $e "find /path/to/dir -type f -name file-names-to-consider -exec grep -i 'word-to-find' '{}' \;" >> $log
done
或者,如果您希望在日志文件中写入包含您要查找的单词的文件的名称,那么请考虑以下解决方案:
#!/bin/bash
log=/var/tmp/filefind.log
servers="server1 server2 server3"
for e in $servers
do
ssh $e "find /etc -type f -name file-names-to-consider -exec sh -c \"grep -i 'word-to-find' '{}' > /dev/null && echo '{}'\" \;" >> $log
done
例如:
#!/bin/bash
log=/var/tmp/filefind.log
servers="server1 server2 server3"
for e in $servers
do
ssh $e "find /etc -type f -name host* -exec sh -c \"grep -i '127' '{}' > /dev/null && echo '{}'\" \;" >> $log
done
将 /var/tmp/filefind.log 写入a)位于 / etc 或以下的3台服务器上的所有文件的名称,b)匹配 host * 的文件名模式(例如 hosts 或 hostname 但不是 myhost ,而c)包含at字符串 123 。
中至少有一行但是,如果您只是想检查服务器上是否存在 / foo / bar 文件,并且您希望拥有要写入文件的那些服务器的名称到日志文件,然后这个解决方案将执行:
#!/bin/bash
log=/var/tmp/filefind.log
servers="server1 server2 server3"
filename=/foo/bar
for e in $servers
do
ssh $e "test -f $filename && echo $e" >> $log
done