Bagaimana cara mengunduh file terbaru dalam folder menggunakan scp?


10

Saya ingin menjalankan transfer scp untuk mengunduh file terbaru (terbaru) di direktori tertentu ke direktori lokal saya.

Sesuatu seperti ini:

  • sumber :root@rimmer.sk:/home/rimmer/backups/
  • tujuan :/home/rimmer/backups/

Saat mendapatkan file terbaru saja, tidak semuanya, dalam backups.

Jawaban:


12

Misalkan Anda memiliki variabel serverdan dirdidefinisikan, Anda dapat melakukannya

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

Di mana Anda pertama kali mencari file terbaru, dan lalu menyalinnya.

Catatan: Saya tidak memeriksanya untuk kemudahan (misalnya, entri terbaru berupa folder)


Jika itu direktori yang tidak akan scp apa pun. Anda harus menggunakan scp -r.
slm

@ msl Benar, tapi dia mungkin tidak ingin menyalinnya.
Bernhard

Jika scpmendapatkan terputus maka harus memulai kembali penyalinan dari awal, rsyncdapat melanjutkan dari tempat sebelumnya.
slm

Untuk bash, saya perlu mengganti tanda kutip tunggal dengan tanda kutip ganda dalam argumen untuk ssh.
Johannes Bittner

1
Anda dapat menghapus $ dir pertama dengan melakukan yang berikut (menambahkan a /*ke akhir $ dir kedua):scp $server:$(ssh $server 'ls -t $dir/* | head -1') .
Jesse

1

scpbodoh dalam arti bahwa itu hanya menyalin file secara membabi buta dari sumber ke tujuan. Jika Anda menginginkan sesuatu yang lebih cerdas tentang menyalin file, Anda harus menggunakan alat seperti rsync.

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

Ini hanya akan menyalin file yang hilang atau telah berubah dari direktori backup rimmer.sk di hari terakhir (-tepat -1) ke direktori backup lokal Anda.

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

Referensi


Masalah dengan rsync sama. Jika saya sudah offline selama 2 hari, ia mencoba untuk menyalin semua cadangan dari semua hari, yang saya tidak perlu sama sekali dan sangat besar.
Richard Rodriguez

@RichardRodriguez - OK silakan perbarui pertanyaan Anda dan lebih spesifik apa yang Anda cari.
slm

2
@slm: Saya pikir pertanyaannya baik-baik saja. Saya hanya ingin mengunduh file terbaru dalam direktori. Apa lagi yang bisa saya jelaskan? :)
Richard Rodriguez

@RichardRodriguez - file apa yang ada di direktori ini? Daftar sampel akan sangat membantu.
slm

1
Mengapa memilih bawah?
slm

0

Agak terlambat ke pesta tetapi mungkin solusi dengan ssh dan rsync akan bekerja untuk beberapa:

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.