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}'"

もちろん、これは空白の出力になります。このような検索文字列をシェルで解析し、ssh で必要な出力を取得する方法はありますか?

ありがとう!!

4

2 に答える 2

1

あなたの ssh コマンドにはたくさんの引用符と二重引用符があり、それが問題の原因である可能性があります (しゃれは意図されていません)。必要な検索コマンドを実行するシェル スクリプトを作成し、そのコピーを各サーバーに配置することをお勧めします。その後、複雑なコマンドを渡そうとするのではなく、単純に ssh を使用してそのシェル スクリプトを実行します。

編集: 誤解したと思います。私が間違っている場合は修正してください。IP アドレスの範囲でコマンドを実行するループを作成する方法をお探しですか? その場合は、次のようなシェル スクリプトを作成することをお勧めします。

#!/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 に答える