我写了以下脚本。它创建一个新目录,格式如下年、月、日。它应该做的是将文件复制到新创建的目录,该脚本在远程服务器上创建该目录,但将文件复制到该目录而不是假定为 2017-08-18 的子目录,依此类推。
[root@hostname ~]# cat ontape.sh
#!/bin/bash
#
sshpass -p 'PASSWORD' ssh root@hostname mkdir -p /home/mybackup/ontape/$(date +%Y-%m-%d)
sshpass -p 'PASSWORD' ssh root@hostname mkdir -p /mybackup/ontape_tmp_backup/$(date +%Y-%m-%d)
for server in $(cat servers.txt)
do
sshpass -p 'PASSWORD' scp /dbbackup/backupdb/ontape/fullsize/* $server
done
另外,/root/servers.txt 文件具有以下代码。
[root@hostname ~]# cat servers.txt
root@hostname:/mybackup/ontape_tmp_backup
root@hostname:/home/mybackup/ontape
答案1
您应该更改此行并将您创建的目录添加到其中,如下所示。
sshpass -p 'PASSWORD' scp /dbbackup/backupdb/ontape/fullsize/* "$server/$(date +%Y-%m-%d)"
您也可以使用rsync
它,因为如果目标路径不存在并且不需要mkdir
额外的命令,它将在目标路径中创建最后一级目录。
sshpass -p 'PASSWORD' rsync /dbbackup/backupdb/ontape/fullsize/* "$server/$(date +%Y-%m-%d)"
"$(date +%Y-%m-%d)"
如果目标路径中不存在,这将创建目录。
因此,在您的脚本中,当您要复制到 2 个目标路径并且首先创建目录时,您可以仅使用以下脚本来完成此操作。
for dest in dest1 dest2; do
sshpass -p 'PASSWORD' rsync -av /path/to/src/* "$dest/$(date +%Y-%m-%d)"
done
请注意,使用这种传递密码的方式是不好的做法,因为其他用户可以访问您的系统或可以通过ps -aux
命令观看,相反,您可以设置publikKey认证。
ssh-keygen -t rsa
ssh-copy-id USER@HOST