backup original em scp

1

Eu tenho um host remoto com um arquivo que quero sobrescrever com o scp. isso é simples

scp 'myfile.ext' '[email protected]:/bar/baz'

Eu também gostaria de "renomear" o original "/bar/baz/myfile.xt" em um arquivo, e não substituí-lo pela nova versão. Um simples "/bar/baz/myfile.xt~" é suficiente, mas o melhor seria um contador ou a data atual.

existe alguma maneira de fazer isso com o scp?

Eu gostaria de minimizar as chamadas "scp", porque eu preciso sempre colocar uma senha interativa (não, eu não posso mudar o método de autenticação)

    
por Vito De Tullio 13.12.2017 / 12:37

3 respostas

3

Você deseja renomear o original /bar/baz/myfile.xt as /bar/baz/myfile.xt~ ou, melhor ainda, com um sufixo de contador ou data.

Você não pode fazer isso diretamente com scp , mas aqui estão algumas alternativas ao seu comando original.

  1. Usando rsync

    rsync -ab myfile.ext [email protected]:/bar/baz
    

    O -b sinalizador diz ao rsync para fazer um backup se houver uma alteração no arquivo de destino. O padrão é anexar ~ , mas você pode alterar esse padrão. Por exemplo, isso usará a data de hoje (conforme definido na máquina de origem):

    rsync -ab --suffix ".$(date +'%Y%m%d')" myfile.ext [email protected]:/bar/baz
    
  2. Usando ssh com scp . Eu assumi que baz é o nome do arquivo de destino em vez de um diretório no qual o arquivo de origem deve ser copiado:

    ssh [email protected] 'cp -p /bar/baz /bar/baz."$(date +'%Y%m%d')"' &&
    scp -p myfile.ext [email protected]:/bar/baz
    

    Você poderia usar mv em vez de cp , se preferir, mas isso perderia as permissões não padrão e os links para arquivos no arquivo de destino verdadeiro.

A opção rsync é mais limpa, mas nem sempre é instalada.

    
por 13.12.2017 / 14:07
2

Precisa ser scp ? Eu não acho que ele possa renomear arquivos para você (além de copiar remotamente para remoto, mas eu nunca tive certeza de como isso funciona).

sftp seria bastante simples

$ echo -e 'rename test test.old\nput test' | sftp user@hostname

E você poderia fazê-lo com ssh também, mas note que isso não copia nada, mas os dados de test (sem permissões, timestamps ...)

$ cat test | ssh user@hostname 'mv test "test.$(date +%F_%T)"; cat > test'
    
por 13.12.2017 / 12:49
1

Você pode usar mirrordir

Mirror ~/scripts to ~/scripts.backup:
$ mkdir ~/scripts.backup
$ mirrordir -v ~/scripts ~/scripts.backup

If you rerun mirrordir again, only the updated files are copied.

You can mirroring FTP sites:
$ mirrordir -v ftp://ftp.nixcraft.in/pub /home/backup/nixcraft.in/ftp/pub

mirrordir offers tons of option, refer mirrordir man page for more examples and options:
$ man mirrordir
    
por 13.12.2017 / 14:17