0

下面的示例显示了我需要在本地查找中运行良好的文件搜索和输出类型的方式。

> find /DBBACKMEUP/ -not -name "localhost*" -type f -name "*2012-10-26*" -exec du -b {} \; | awk '{print $2 "\t" $1}' | awk -F'/' '{print $NF}'

monitor_2012-10-26_22h00m.11.29.135.Friday.sql.gz   119601
test_2012-10-26_22h00m.10.135.Friday.sql.gz 530
status_2012-10-26_22h00m.1.29.135.Friday.sql.gz 944

但我需要在许多服务器上打印相同的命令。所以我计划像这样执行。

>ssh root@192.168.87.80 "find /DBBACKMEUP/ -not -name "localhost*" -type f -name "*2012-10-26*" -exec du -b {} \; | awk '{print $2 "\t" $1}' | awk -F'/' '{print $NF}'"

当然,这给出了一个空白输出。有什么方法可以在 shell 中解析这样的搜索字符串并通过 ssh 获得我想要的输出?

谢谢!!

4

2 回答 2

1

看起来你的 ssh 命令有很多引号和双引号,这可能是你问题的根源(没有双关语)。我建议你创建一个 shell 脚本来运行你想要的 find 命令,他们将它的副本放在每台服务器上。之后,只需使用 ssh 执行该 shell 脚本,而不是尝试传入复杂的命令。

编辑: 我想我误解了;如果我错了,请纠正我。您是否正在寻找一种方法来创建将在 IP 地址范围内运行命令的循环?如果是这样,这里有一个建议 - 创建一个这样的 shell 脚本:

#!/bin/bash
for ((C=0; C<255; C++)) ; do
  for ((D=0; D<255; D++)) ; do
    IP="192.168.$C.$D"
    ssh root@$IP "find /DBBACKMEUP/ -not -name "localhost*" -type f -name "*2012-10-26*" -exec du -b {} \; | awk '{print "\$"2 \"\\t\" "\$"1}' | awk -F'/' '{print "\$"NF}'"
  done
done
于 2012-10-26T21:30:50.697 回答
0

每个服务器??那一定是 749 台服务器——你的选择对勤奋的人来说很好。我的方法很适合懒惰的鹅;)只是试了一下;)

ssh root@192.168.47.203 "find /DBBACKMEUP/ -not -name "localhost*" -type f -name "*2012-10-26*" -exec du -b {} \; | awk '{print "\$"2 \"\\t\" "\$"1}' | awk -F'/' '{print "\$"NF}'"

Tel_Avaya_Log_2012-10-26_22h00m.105.23.Friday.sql.gz    2119
test_2012-10-26_22h00m.10.25.Friday.sql.gz  529
OBD_2012-10-26_22h00m.103.2.203.Friday.sql.gz   914
于 2012-10-26T21:46:45.733 回答