![如何使用脚本在 Linux 上重命名远程文件](https://linux22.com/image/548299/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E8%84%9A%E6%9C%AC%E5%9C%A8%20Linux%20%E4%B8%8A%E9%87%8D%E5%91%BD%E5%90%8D%E8%BF%9C%E7%A8%8B%E6%96%87%E4%BB%B6.png)
我想要一个 (bash) 脚本来重命名多个远程 Linux 服务器上的文件,您知道该怎么做吗?谢谢。
答案1
您可以使用 ssh 来实现这一点。例如:
for server in server1 server2 server3; do ssh $server mv oldfilename newfilename; done
您可能希望将服务器列表存储在环境变量中:
export MYLISTOFSERVERS="server1
server2
server3
...
servern
"
以及(例如)bashrc(或专用脚本)中的一个函数:
runforeachserver () {
for server in $MYLISTOFSERVERS; do
ssh $server "$@"
done
}
因此,每当您想为每个服务器执行任务时,都可以调用它。例如,根据需要重命名文件:
runforeachserver mv oldfilename newfilename
或者(仅向您展示如何通过 ssh 传递命令):
runforeachserver date -d \"month ago\" +\"%Y-%m-%d\"
2011-04-04
2011-04-04
2011-04-04
2011-04-04
2011-04-04
2011-04-04
显然,这可以像您希望的那样强大(启用服务器名/sshport 数组)、语法检查等......
答案2
虽然不是 bash 脚本,但你也可能想尝试集群SSH.它将帮助你同时在多台服务器上执行相同的命令。
答案3
您可以使用单行 perl:
perl -lne 'system("/usr/bin/ssh -l username $_ command")' computers
计算机是文件每行一个 IP 地址,命令是您要运行的实际命令。(根据需要修改 ssh 二进制文件的路径,出于安全原因请使用绝对路径)
您还应该设置 SSH 密钥。您可以使用 ssh-copy-id 来实现这一点,这样您就不需要在每次运行脚本时为每个服务器输入密码。
ssh-keygen
ssh-copy-id username@hostname