运行Bash脚本另一台服务器

我想逐个运行命令,以便更改服务器上目录的名称。

当我运行脚本时,在服务器1中重命名的目录。但是,在服务器2中找不到目录。

脚本中的错误可能是什么?

脚本;

#!/bin/bash mach_directory=/home/user/example erase_dir1=cache erase_dir2=tmp for i in {0..10} do user=user server=$(ssh $user@server$i hostname) ssh $user@$server find $mach_directory -type d -name $erase_dir1 ! -path "*Admin/$erase_dir1*" -print0 | while IFS= read -r -d '' file ; do mv "$file" "${file}_$(date +%d%m%Y)"; done ssh $user@$server find $mach_directory -type d -name $erase_dir2 ! -path "*Admin/$erase_dir2*" -print0 | while IFS= read -r -d '' file ; do mv "$file" "${file}_$(date +%d%m%Y)"; done done 

编辑:我换了报价。

引用ssh参数后的命令

 ssh $user@$server "find $mach_directory -type d -name $erase_dir1 ! -path '*Admin/$erase_dir1*' -print0 | while IFS= read -r -d '' file ; do mv '$file' '${file}_$(date +%d%m%Y)'; done" 

(我把双引号改成了单引号。)

你可能需要做很多的转义工作,尽可能多的代码在本地执行,在你运行脚本的机器上,或者把“ssh $ user @ $ server”之后的所有脚本放在一个文件中,然后复制它给所有的服务器并执行它。

另外,你可能想看看并行的SSH 。

编辑:

在这种情况下,所有具有$的元素,以及pipe道和等于将在您运行脚本的机器上本地执行。 这意味着它将仅在本地执行远程计算机上的find命令和脚本的其余部分。