以下示例显示了我需要如何在本地查找中正常工作的文件搜索和输出类型的方式。
> 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得到我想要的输出吗?
谢谢!
答案 0 :(得分: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
答案 1 :(得分: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