2012-10-26 154 views
0

下面的例子顯示了我如何需要文件搜索和輸出類型,這在本地查找中運行良好。使用ssh查找命令

> 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 [email protected] "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的輸出?

謝謝!

回答

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 [email protected]$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 
+0

答案更新。 – mannoj

+0

這就是我所做的確切的事情。但是在我的情況下,IP會因不同網關的數據而有所不同。所以我已經將ips作爲一個函數調用循環。 – mannoj

0

每臺服務器?這必須是749服務器 - 你的選擇對硬工友有好處..我的做法對於懶惰的鵝來說很好;)只是一個試驗做了點擊;)

ssh [email protected] "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