Dosyayı kaynaktan hedefe taşımak için rsync alınıyor mu?


15

Rsync projem için iyi bir seçim mi?

Yapmam gerekenler:
- dosyaları SSH üzerinden kaynaktan hedef klasöre
kopyalamak,
- tüm dosyaların kopyalandığından emin olmak, - kopyaladıktan sonra kaynak dosyaları silmek.
- çakışma adım varsa dosyaları yeniden adlandırmam gerekir.

Görünüşe göre seçeneği kullanabilirsiniz: --remove-source-files (kaynak dosyaları silmek için)
Ama rsync çakışmayı nasıl yönetebilirim, kurallar alabilir miyim?

Projemdeki örneği kullan:

Sunucu A üzerinde bilimsel hesaplama çalıştırın ve sonuçları klasör "süreç" eklenir, her hesaplama için böyle bir havuz var: / process / calc1.
Şimdi "/ calc1" deposunu sunucu B'ye aktarmak / işlem / calc1 almak ve sunucudan "calc1" silmek istiyorum
... Başka bir hesaplama sırasında A sunucusunda "/ process / calc2" alıyorum, fikir aynı zamanda sunucu B "/ process /" dizininde "calc2" taşımaktır, o zaman şimdi B sunucusunda var:
- / process / calc1
- / process / calc2
(ve / process / on sunucu A boş).

Yeni bir hesaplamadan sonra sunucuda "/ process / calc1" gibi başka bir klasör varsa (sunucu B'de "/ process / calc1" varsa), rsync çakışmasını (sunucu B'de) nasıl yönetir?

Rsync ile kurallar eklemek ve sunucu B'de "process / calc1R2" ile "/ process / calc1" yeniden adlandırmak mümkün müdür? Ve benzerleri (ör: calc1R3)?

Teşekkürler.

Yanıtlar:


11

Rsync'i gerçekten kullanmak istiyorsanız, --backup, --backup-dir ve --suffix'in bazı kombinasyonlarına ihtiyacınız olacak gibi görünüyor. Sanırım alabileceğin en yakın şey böyle bir şeyle

rsync -abv --suffix R1 --remove-source-files src/ dst/

Bu, istediğiniz şeye yakın olur, ancak dosyaları tam olarak istediğiniz şekilde yeniden adlandırmaz. --Suffix seçeneği varolan bir dosyanın sonuna metin ekler, ancak bunu yalnızca ilk çakışma için yapar. Tekrar çalıştırırsanız, ilk yedeklemenizin üzerine yazacaktır. Komut her çalıştığında bu sonek değerini değiştirmeniz gerekir; bu, zaman damgasıyla bir şey kullandıysanız işe yarayacaktır, örneğin:

rsync -abv --suffix `date +%Y%m%d%k%M%S` --remove-source-files src/ dst/

Bunun peşinde olduğunuz şey için aşırıya kaçma olup olmadığından emin değilim, ancak gereksinimlerinizi karşılaması gerekir.


Hesaplamadan sonra büyük dosyalara sahip olabilirim, bu yüzden (ağ sorunu olması durumunda) rsync kullanmak daha iyidir.
user44782

1

Adından da anlaşılacağı gibi, dosyaları senkronize etmek için rsync kullanılır. "Senkronize edildiğinde", kaynak ve hedefteki dosyaların aynı olduğu anlamına gelir. Bu yapmak istediğiniz gibi görünmüyor.

Görünüşe göre sadece bazı dosyaları taşımak istiyorsunuz. Bunun için rsync kullanmanıza gerek yoktur. Bir linux veya BSD kullandığınız anlaşılıyor. Sv üzerinden mv -n kullanabilirsiniz. -N seçeneği varolan dosyaların üzerine yazmaz. Bu% 100 otomatik değildir. Ancak dosyanın sizin durumunuzda nasıl var olabileceğini göremiyorum. Dosyalar kaynaktan hedefe kopyalanacak ve daha sonra kaynaktan kaldırılacaktır. Aynı hesaplamaları tekrar yapmak ister misiniz? Bu yüzden aynı ada sahip dosyalar elde edeceksiniz? Klasör adına bir çalıştırma veya parti numarası eklemenizi öneririm. Zaten net olmasını istersiniz. Klasörün adı üzerinde herhangi bir kontrolünüz var mı? Daha fazla ayrıntı var mı? Komutları bir bash komut dosyasına veya benzerine koymanızı tavsiye ederim.


Bazı durumlarda, aynı hesaplamayı tekrar çalıştırmam gerekiyor (ve bu yüzden aynı ada sahip dosyalarla sonuçlanıyorum). Doğru, bir çalışma eklemek iyi bir fikir: mmv -a komutunu da bul (umarım ssh modunda çalışır, birisi zaten bu komut satırını kullanıyor mu?). Klasörün nasıl adlandırıldığı üzerinde kontrolüm var.
user44782

Büyük olasılıkla makineye yüklenmemiş. Makineniz ise, yükleyebilirsiniz. Debian tabanlı: sudo apt-get install mmv Ayrıca sshfs veya NFS'ye bakabilir ve dosyaların doğrudan son hedefe gönderilmesini sağlayabilirsiniz. Ara konuma ihtiyaç duyulmadıkça (muayene, değişiklik, vb.). İki makine arasındaki bağlantı güvenilir değilse, bu kötü bir fikirdir elbette. Paul'ün önerisi iyidir. Yine de, başlangıç ​​numarasına koşu numarasını eklemek muhtemelen daha organize olacaktır.
d -_- b

1
Ssh üzerinde "mv -n" kelimesini nasıl kullanıyorsunuz? Mv'yi sshfs üzerinden kullanabilirsiniz.
guettli

Ops ... Evet, bu daha net.
d -_- b

-1

SSH için özet olarak şunu kullanın:

Uzak kabuk üzerinden erişim:

Çekin: rsync [OPTION ...] [USER @] HOST: SRC ... [DEST]

Push: rsync [SEÇENEK ...] SRC ... [USER @] HOST: DEST

Her şey rsync (1) 'de açıklanmıştır.

Bir cronjob için komut dosyası oluşturmaya gelince, ssh üzerinden şifre gerektirmeden rsync'i otomatik olarak ssh-agent'a (1) bakın.

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.