使用SSH通话,我需要运行“查找”功能。远程系统上的命令如下:
/usr/bin/find $mountpoint -type f -mtime +1095 -ls
(其中$ mountpoint是定义的路径)
然后我想获取输出的字段7(字节)
6668 56 -rw-r--r-- 1 46978 32840 51652 Jun 24 1999 ./wafs2/BF_BRN_S1/Cta/updatesxp/OfficeSP1/FILES/WINDOWS/FONTS/ELEPHNT.TTF
6811 80 -rw-r--r-- 1 46978 32840 76588 Oct 15 1999 ./wafs2/BF_BRN_S1/Cta/updatesxp/OfficeSP1/FILES/WINDOWS/FONTS/POORICH.TTF
6670 56 -rw-r--r-- 1 46978 32840 54324 Jun 24 1999 ./wafs2/BF_BRN_S1/Cta/updatesxp/OfficeSP1/FILES/WINDOWS/FONTS/ELEPHNTI.TTF
6804 56 -rw-r--r-- 1 46978 32840 55824 Jun 29 1999 ./wafs2/BF_BRN_S1/Cta/updatesxp/OfficeSP1/FILES/WINDOWS/FONTS/ROCC____.TTF
...并返回每行的总计数,如下所示:
/usr/bin/find $mountpoint -type f -mtime +1095 -ls | /bin/awk '{sum+=$7} END {print sum}'
并返回sum的值。
在远程主机上的本地bash会话中,这可以完美地工作并返回如下值: 1.61468e + 12
但是,当我尝试通过SSH运行相同的命令时,它不起作用:
$file_find_cmd = "/usr/bin/find $mountpoint -type f -mtime +1095 -ls | /bin/awk '\"{sum+=\$7} END {print sum}\"'";
print "here's \$file_find_cmd:$file_find_cmd\n";
$nas_find_cmd = "$ssh nasadmin\@$vnx -q '. /home/nasadmin/.set_nas_env_vars; $file_find_cmd'";
open($file_find_handle,'-|',"$nas_find_cmd") or die "Unable to run command $nas_find_cmd: $!\n";
我已经试图逃避$ 7中的$但是没有取得任何进展......所以我不认为这是。
帮助?感谢。
答案 0 :(得分:0)
我仍然不确定你想要完成什么,但这是一个尝试:
#!/bin/sh
vnx=$1
mountpoint=$2
my_ssh="ssh -q $vnx /usr/bin/find $mountpoint -type f -mtime +1095 -ls | /usr/bin/awk '{sum+=\$7} END { print sum }'"
result=`$my_ssh`
echo Result is $result
以./findremote.sh target_server /var
输出形式为我工作:
Password:
Result is 226758
(它仍然要求输入密码,因为目标系统上没有任何authorized_keys)
此时,您在$result
中希望获得此本地脚本中的后期处理值...
希望它能帮到你
编辑精度:当通过ssh启动命令时,不需要引用它们,主机之后的所有内容都将作为命令进行处理,因此对于您之前获取文件的特定示例,只需在此之前添加它: / p>
my_ssh="ssh -q $vnx . /home/nasadmin/.set_nas_env_vars; /usr/bin/find $mountpoint -type f -mtime +1095 -ls | /usr/bin/awk '{sum+=\$7} END { print sum }'"
如果您想进行额外测试并仅在采购有效时执行查找,请将;
更改为&&
答案 1 :(得分:0)
我通过使用多个反斜杠转义所需列的占位符var来解决此问题;我缺乏awk和regexp的经验让我相信用一个反斜杠(即print \ $ 7)而不是三个(print \\ $ 7)来逃避它就足够了。
$nas_find_cmd = "$Ssh -q root\@$vnx \". /home/nasadmin/.set_nas_env_vars; /usr/bin/find $mountpoint -type f -mtime +1095 -ls | /bin/awk '{ sum=sum+= **\\\$7**} END { print sum }'\"";
我现在只有0.00042%更聪明。
全部谢谢!