Como baixar o arquivo mais recente em uma pasta usando um scp?

10

Gostaria de executar uma transferência scp para fazer o download do arquivo mais recente (mais recente) em um determinado diretório para o meu diretório local.

Algo parecido com isto:

Ao obter apenas o arquivo mais recente, não todos, em backups .

    
por Richard Rodriguez 10.07.2013 / 09:49

3 respostas

10

Suponha que você tenha variáveis server e dir definidas, você pode fazer

$ dir="~"
$ server="[email protected]"
$ scp $server:$dir/$(ssh $server 'ls -t $dir | head -1') .

Onde você procurar primeiro o arquivo mais recente e copiá-lo.

Observação: eu não verifiquei se ele é infalível (por exemplo, a última entrada é uma pasta)

    
por 10.07.2013 / 10:04
0

scp é burro no sentido de que apenas copia cegamente os arquivos da origem para o destino. Se você quer algo mais inteligente sobre copiar arquivos, você precisará usar uma ferramenta como rsync .

$ rsync -avz [email protected]:'$(find /home/rimmer/backups/ -ctime -1)' /home/rimmer/backups/

Isso só copiará os arquivos que estão faltando ou foram alterados do diretório de backups do rimmer.sk no último dia (-ctime -1) para o diretório do backup local.

-ctime n
   File's  status  was last changed n*24 hours ago.  See the comments for 
   -atime to understand how rounding affects the interpretation of file 
   status change times.

Referências

por 10.07.2013 / 09:53
0

Um pouco atrasado para a festa, mas talvez uma solução com ssh e rsync funcione para alguns:

source_host="yourhost.com"
source_dir="/a/dir/on/yourhost.com/"
target_dir="/the/dir/where/last_backup/will/be/placed"
last_backup=$(ssh user@${source_host} "ls -t ${source_dir} | head -1")
if [ "${last_backup}" == "" ]; then
    echo "ERROR: didn't find a backup, cannot continue!"
else
    echo "the last backup is: ${last_backup}"
    rsync -avzh user@${source_host}:${source_dir}/${last_backup} ${target_dir}
fi
    
por 23.12.2016 / 20:37