Я написал следующий сценарий. Он создает новый каталог в формате «Год, Месяц, День». Предполагается, что он должен скопировать файл во вновь созданный каталог, сценарий создает каталог на удаленном сервере, но копирует файл в каталог, а не в подкаталог, который предположительно должен быть 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
Вы должны изменить эту строку и добавить в нее созданный вами каталог, как показано ниже.
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