Mover arquivos pelo SSH e excluir na fonte após a cópia final bem-sucedida

1

Eu tenho uma pasta de aproximadamente 200.000 arquivos, com um tamanho total em torno de 300 GB, que preciso transferir por uma conexão SSH para um host remoto. Eu estou procurando uma maneira de ter os arquivos locais excluídos depois de ter sido verificado que eles foram copiados com sucesso para o host remoto, mas não consigo descobrir como fazê-lo. rsync --remove-source-files parece inseguro se a conexão for interrompida de acordo com outras postagens ( aqui ). Como pode ser feito com segurança?

    
por Morgan 18.09.2013 / 16:14

3 respostas

1

Tenha um script de shell:
Observe que ele faz algumas suposições, que documentamos abaixo.

#!/bin/sh

# first, upload the directory structure
# be REALLY sure that it made it intact!
while true
do
    # try to upload it:
    rsync $flags --filter="+ */" --filter="- *" $source $destination
    # it uploaded fine? cool, break the loop (else try again):
    [ "$?" -eq 0 ] && break
done

# now the files
for file in $(find $source -not -type d)
do
    # again, be REALLY sure they copied okay!
    while true
    do
        # try to upload it:
        rsync $flags $file $destination/$file
        # it uploaded fine? cool, break the innermost loop (else try again):
        [ "$?" -eq 0 ] && break
    done
    # delete the local copy of the file:
    rm $file
done

Este script pressupõe o seguinte:

  1. Que $source , $destination e $flags foram definidos como variáveis de ambiente ou substituídos no script pela origem, destino e qualquer outra rsync flags que você deseja usar. (Não substitua $? ou $file .)
  2. Esse $source é um caminho relativo.
  3. Esse rsync sairá com um status diferente de zero se por qualquer motivo o $file especificado não tiver sido copiado 100% com êxito.
  4. Que você testou em dados menos importantes, porque não o fiz.

Os parâmetros rsync --filter foram copiados de um post no blog por um cara chamado Phil . Espero que esteja tudo bem com ele. :)

    
por 19.09.2013 / 01:49
0

Pode ser que você possa usar sshfs . O sshfs permite que você "monte" um diretório remoto via ssh (na verdade executando comandos outros ssh para imitar um sistema de arquivos). Você pode usar mv para mover seus arquivos.

Você não precisa ser superusuário, pois é um sistema de arquivos do espaço do usuário.

    
por 18.09.2013 / 16:20
0

Você pode dividir os arquivos em blocos de dez por exemplo e, em seguida,

rsync (source files) destination

E, se for executado com sucesso, siga-o com

rsync --remove-source-files (source files) destination

A largura de banda adicionada de um segundo comando rsync é insignificante.

    
por 19.09.2013 / 03:02