Unix SSH:在两台服务器上查找具有不同路径的文件

时间:2018-03-09 17:34:54

标签: unix ssh

我有服务器A&服务器B.我想在两台服务器上提交find命令,但路径不同。

目前我创建了以下代码:

dir1=( $DATA_DIR/sdfgv  $DATA_DIR/1wefgg $DATA_DIR/3fdsevg );
dir2=( $DATA_DIR/asdf  $DATA_DIR/sdfewfT $DATA_DIR/efergvfw );

timestamp=$(date +%Y%m%d%H%M%S);
report_name=Audit_Report_${timestamp}.txt

uname=xyz
server=( serv1 serv2);

for j in ${server[@]}; 
do {
if [ "$j" == "serv1 " ]
then
for i in ${dir1[@]}; 
do { 
Size=`ssh -q $uname@$j "find $i -type f -mtime +1 -name '*.gz' -printf '%s + ' | dc -e0 -f- -ep"`; 
echo " $j        $i                $Size "
}  
done 
else 
for i in ${dir2[@]}; 
do { 
Size=`ssh -q $uname@$j "find $i -type f -mtime +1 -name '*.gz' -exec du -k {} \; | awk '{ total += $ 1} END{print total/1024;}'"`; 
echo " $j        $i                $Size "
}
done
fi
}
done 

这段代码工作得很好,但我想要的东西可以是通用的,如果不在服务器名称上。

我不想在服务器名称中使用if else。

两台服务器都有不同的目录路径来搜索

请提出一些建议。

谢谢!

1 个答案:

答案 0 :(得分:0)

Bash功能会有所帮助。也许用于确定哪个目录用于哪个服务器,然后用于执行find命令。像这样的东西(伪代码,未经测试):



getDirs() {
  if [ $1 == 'server1' ]; then
    echo $dir1
  fi
  if [ $1 == 'server2' ]; then
    echo $dir2
  fi
}

findFiles() {
  local srv=$1
  shift
  local dir=$1
  shift
  local findArgs=$@

  echo $(ssh -q $uname@$srv "find $dir $findArgs")
}

for srv in ${server[@]};
do
  dirs=$(getDirs $srv)
  for d in $dirs
  do
    findFiles $srv $d -type f -mtime +1 -name '*.gz'
  done
done




您的示例使用查找结果执行不同的操作,因此您仍然需要添加逻辑来处理它(可能只是循环中的if语句可能..)