Come scaricare l'ultimo file in una cartella usando uno scp?


10

Vorrei eseguire un trasferimento scp per scaricare l'ultimo file (più recente) in una determinata directory nella mia directory locale.

Qualcosa come questo:

  • fonte :root@rimmer.sk:/home/rimmer/backups/
  • destinazione :/home/rimmer/backups/

Mentre si ottiene solo il file più recente, non tutti, in backups.

Risposte:


12

Supponiamo di avere variabili servere dirdefinite, che puoi fare

$ dir="~"
$ server="user@server.com"
$ scp $server:$dir/$(ssh $server 'ls -t $dir | head -1') .

Dove prima cerchi il file più recente e poi lo copi.

Nota: non l'ho verificato per impermeabilità (ad esempio, l'ultima voce è una cartella)


Se è una directory che non scapperà nulla. È necessario utilizzare scp -r.
slm

@slm Corretto, ma potrebbe non voler copiarlo.
Bernhard,

Se il scpget viene interrotto, sarà necessario riavviare la copia dall'inizio, rsyncpuò riprendere da dove era stato interrotto.
slm

Per bash, dovevo sostituire le virgolette singole con virgolette doppie nell'argomento ssh.
Johannes Bittner,

1
È possibile rimuovere il primo $ dir procedendo come segue (aggiunto /*a alla fine del secondo $ dir):scp $server:$(ssh $server 'ls -t $dir/* | head -1') .
Jesse

1

scpè stupido, nel senso che copia semplicemente alla cieca i file dall'origine alla destinazione. Se desideri qualcosa di più intelligente nella copia dei file, dovrai utilizzare uno strumento come rsync.

$ rsync -avz root@rimmer.sk:'$(find /home/rimmer/backups/ -ctime -1)' /home/rimmer/backups/

Questo copierà solo i file mancanti o modificati dalla directory dei backup di rimmer.sk nell'ultimo giorno (-ctime -1) nella directory del backup locale.

-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.

Riferimenti


Il problema con rsync è lo stesso. Se sono offline da 2 giorni, prova a copiare tutti i backup di tutti i giorni, cosa di cui non ho bisogno ed è enorme.
Richard Rodriguez,

@RichardRodriguez - OK, aggiorna la tua domanda e sii più specifico su ciò che stai cercando.
slm

2
@slm: penso che la domanda vada bene così com'è. Voglio solo scaricare l'ultimo file in una directory. Che altro posso spiegare al riguardo? :)
Richard Rodriguez,

@RichardRodriguez - quali file si trovano in questa directory? Un elenco di esempio sarebbe utile.
slm

1
Perché il voto negativo?
slm

0

Un po 'tardi alla festa, ma forse una soluzione con ssh e rsync funzionerà per alcuni:

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.