scp 文件复制到新目录

scp 文件复制到新目录

我写了以下脚本。它创建一个新目录,格式如下年、月、日。它应该做的是将文件复制到新创建的目录,该脚本在远程服务器上创建该目录,但将文件复制到该目录而不是假定为 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 

相关内容