scp file para o novo diretório

0

Eu escrevi o seguinte script. Cria um novo diretório formatado como este ano, mês, dia. O que se supõe fazer é copiar um arquivo para o diretório recém-criado, o script cria o diretório no servidor remoto, mas copia o arquivo para o diretório e não para o subdiretório que supostamente é o 2017-08-18, e assim por diante .

[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

Além disso, o arquivo /root/servers.txt possui o seguinte código.

[root@hostname ~]# cat servers.txt
root@hostname:/mybackup/ontape_tmp_backup
root@hostname:/home/mybackup/ontape
    
por D.F. 18.08.2017 / 21:05

1 resposta

1

Você deve alterar esta linha e adicionar o diretório que criou a seguir.

sshpass -p 'PASSWORD' scp /dbbackup/backupdb/ontape/fullsize/* "$server/$(date +%Y-%m-%d)"

Você também pode usar rsync , pois ele criará o diretório de último nível no caminho de destino, se ele não existir, e não precisará de mkdir lá como comando extra.

sshpass -p 'PASSWORD' rsync /dbbackup/backupdb/ontape/fullsize/* "$server/$(date +%Y-%m-%d)"

isso criará o diretório de "$(date +%Y-%m-%d)" se ele não existir no caminho de destino.

Assim, no seu script, como você vai copiar para 2 destinos e você está criando diretórios primeiro, você pode fazê-lo apenas com o script abaixo.

for dest in dest1 dest2; do 
    sshpass -p 'PASSWORD' rsync -av /path/to/src/* "$dest/$(date +%Y-%m-%d)"
done

Por favor, note que usar esta forma de passar sua senha é uma má prática, já que ela fica visível para outros usuários que acessam seu sistema ou pode assistir via ps -aux , em vez disso você pode set uma autenticação de publikKey .

ssh-keygen -t rsa
ssh-copy-id USER@HOST 
    
por 18.08.2017 / 21:21