Scp kullanarak bir klasördeki en son dosyayı nasıl indirebilirim?


10

Belirli bir dizindeki en son (en yeni) dosyayı yerel dizinime indirmek için bir scp aktarımı çalıştırmak istiyorum.

Bunun gibi bir şey:

  • kaynak :root@rimmer.sk:/home/rimmer/backups/
  • hedef :/home/rimmer/backups/

Sadece en yeni dosyayı alırken, hepsini değil backups.

Yanıtlar:


12

Değişkenleriniz olduğunu serverve dirtanımladığınızı varsayalım

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

En yeni dosyayı ilk aradığınız yeri kopyalayın.

Not: Kusursuz olup olmadığını kontrol etmedim (örneğin, son giriş bir klasördür)


Bir şey scp olmayacak bir dizinse. Kullanmanız gerekiyor scp -r.
slm

@slm Doğru, ancak bunu kopyalamak istemeyebilir.
Bernhard

Eğer scpolsun en başından itibaren kopyalama yeniden başlatmanız gerekir kesintiye, rsynckaldığı yerden devam edebilir.
slm

Bash için, tek tırnakları argümandaki çift tırnaklarla değiştirmem gerekiyordu ssh.
Johannes Bittner

1
Aşağıdakileri yaparak ilk $ dir komutunu kaldırabilirsiniz ( /*ikinci $ dir sonuna sonuna a eklendi ):scp $server:$(ssh $server 'ls -t $dir/* | head -1') .
Jesse

1

scpdosyaları kaynaktan hedefe körü körüne kopyalaması anlamında aptal. Dosya kopyalama konusunda daha akıllı bir şey istiyorsanız, gibi bir araç kullanmanız gerekir rsync.

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

Bu, yalnızca eksik olan veya son gündeki rimmer.sk yedek dizininden (-ctime -1) yerel yedek dizininize değiştirilen dosyaları kopyalar.

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

Referanslar


Rsync ile ilgili sorun aynıdır. 2 gün boyunca çevrimdışıysam, tüm günlerdeki tüm yedekleri kopyalamaya çalışır, ki bu hiç ihtiyacım yok ve çok büyük.
Richard Rodriguez

@RichardRodriguez - Tamam, lütfen sorunuzu güncelleyin ve neyin peşindeyseniz daha spesifik olun.
slm

2
@slm: Bence soru olduğu gibi. Sadece en son dosyayı bir dizine indirmek istiyorum. Bununla ilgili daha ne açıklayabilirim? :)
Richard Rodriguez

@RichardRodriguez - bu dizinde hangi dosyalar var? Örnek bir liste yararlı olabilir.
slm

1
Neden aşağı oy?
slm

0

Partiye biraz geç ama belki ssh ve rsync ile bir çözüm bazıları için işe yarayacak:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.