나는 다음 스크립트를 작성했습니다. 연도, 월, 일 형식으로 새 디렉터리를 생성합니다. 수행해야 할 작업은 스크립트가 원격 서버에 생성된 새로 생성된 디렉터리에 파일을 복사하는 것입니다. 그러나 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
다른 사용자가 시스템에 액세스하거나 명령을 통해 볼 수 있으므로 이러한 비밀번호 전달 방법을 사용하는 것은 좋지 않습니다.publicKey 인증 설정.
ssh-keygen -t rsa
ssh-copy-id USER@HOST