it-swarm-tr.com

FTP üzerinden rsync nasıl kullanılır

Herhangi bir unix:

Ben iyi çalışıyor aşağıdaki cmd hattı var.

rsync -avr -e ssh /home/dir [email protected]:/home/

Ama şimdi sadece bir FTP sunucusu olan uzak bir sunucuya rsync kurmak için ayarlamam gerekiyor. Bunu nasıl yapabilirim?

Ben rsync yardım baktı ama hızla kayboldu (Bu şeyleri çok sık yapmıyorum).

191
bumperbox

Yapmazsın. rsync bunu sizin için yapamaz, kendi protokolüdür ve FTP üzerinden çalışmaz.

Ancak, csync denemek isteyebilirsiniz. IIRC HTTP üzerinden rsync benzeri davranışlar sağlar. FTP üzerinden çalışıp çalışmadığı hakkında yorum yapamam, denemeniz gerekecek.

80
serverhorror

rsync başkalarının bahsettiği nedenlerle sizin için çalışmayacak. Ancak, lftp ve ncftp her ikisi de muhtemelen ihtiyaçlarınızı karşılayacak "ayna" modlarına sahiptir.

Ben bir yerel ftp ftp veya sftp web Host şeyler itmek için bunu kullanın:

lftp -c "set ftp:list-options -a;
open ftp://user:[email protected]; 
lcd ./web;
cd /web/public_html;
mirror --reverse --delete --use-cache --verbose --allow-chown  
--allow-suid --no-umask --parallel=2 --exclude-glob .svn"
163
easel

şövale ile yazıldığı gibi, lftp iyi bir araçtır.

Senaryoyu parametreleştirmenizi ve

exclude-glob

shell'in glob özelliğini (* ,? ..) kullanarak dosya adlarını hariç tutan seçenekler:

#!/bin/bash    
Host="your.ftp.Host.dom"
USER="username"
PASS="password"
FTPURL="ftp://$USER:[email protected]$Host"
LCD="/path/of/your/local/dir"
RCD="/path/of/your/remote/dir"
#DELETE="--delete"
lftp -c "set ftp:list-options -a;
open '$FTPURL';
lcd $LCD;
cd $RCD;
mirror --reverse \
       $DELETE \
       --verbose \
       --exclude-glob a-dir-to-exclude/ \
       --exclude-glob a-file-to-exclude \
       --exclude-glob a-file-group-to-exclude* \
       --exclude-glob other-files-to-exclude"

Uyarı: hedef dizinin var olduğundan emin olun, aksi takdirde cd komutu başarısız olur, bu nedenle dosyaları yanlış dizinde (kök) yer alacak!

Komut dosyasını güncelledim, böylece --delete seçeneği varsayılan olarak devre dışıdır, DELETE= command.

123
GabrieleV

Gerçekte yapmaya çalıştığınız şeye bağlı olarak, tamamen farklı bir yaklaşım, bir ftp klasörünü bağlamak için curlftps ve ardından rsync iki "yerel" klasörü kullanmak olabilir.

Kurulum dağıtımınıza bağlı olarak farklıdır, bu yüzden genelleme yapamam, ancak Fuse ve curlftpfs'yi yüklemeniz gerekiyor (prolly Debian'ın zaten varsayılan olarak Fuse kurulumu var), sonra:

  1. Sudo apt-get install curlftpfs

  2. Fuse modülünün yüklendiğinden emin olun (modprobe Fuse)

  3. Sudo curlftpfs ftp.yourserver.com /path/to/ftp/folder/ -o user=username:password,allow_other

Son virgülden sonra boşluk olmadığını unutmayın (yazım hatası değildir!). Bundan memnunsanız veya her seferinde bunu yapmak istemiyorsanız, fstab'ınıza ekleyebilirsiniz (genellikle /etc/fstab):

curlftpfs#user:[email protected] /path/to/ftp/folder/ Fuse auto,user,uid=1000,allow_other 0 0

Bu durumda, Sigorta modülünün daha önce yüklendiğinden emin olmanız gerekir.

Yine de, iki şeyden haberdar olun:

  • Geliştiricinin projeyi bir veya iki yıl önce düşürdüğünden, şimdilik ne kadar kullanılabilir/kararlı olduğunu bilmiyorum.
  • Parola tuhaf bir karakter içeriyorsa curlftpfs başarısız olabilir (belki .netrc).

weex ... var.

Weex, bir web sayfasını veya başka bir FTP arşivini uzaktan koruma görevini otomatikleştirmek için tasarlanmış bir yardımcı programdır. Gerektiğinde karşıya yükleme ve uzaktan silme işlemleri gerçekleştirerek bir dizi yerel dosyayı uzak sunucuya senkronize eder.

16
Johan

rsync ftp üzerinde çalışmaz. Uzak tarafta, rsync arka plan programı ya da rsync'i çağırabileceği bir Kabuk gerekir. Ftp genellikle birkaç komutu çağırmanıza izin verir ve rsync bunlardan biri değildir. "Lftp" gibi ftp görevlerini otomatikleştirmek için başka araçlar da vardır.

9
Ian Kelling

Bu iyi ve özgür bir uyum gibi görünüyor: https://savannah.gnu.org/projects/ftpsync/

8
pauska

Yapmaya çalıştığınız şey için wget'i de kullanabilirsiniz.

wget -m ftp: // kullanıcı adı: [email protected]

7
Aaron

Ftp'yi bağlamak için curlftpfs komutunu kullanabilir ve http://linux.die.net/man/1/curlftpfs sonrasında rsync kullanabilirsiniz

5
shaftmx

GVFS/FTP kullanıyorum. Uzak FTP sunucularımı jigolo ile bağlarım. Yerel dizinler olarak görüldüğü gibi, yerel dosyalar üzerinde çalışan hemen hemen her şey çalışır. rsync, dosyaları aktarmadan dosyaları karşılaştırmak için dosya karmasını uzaktan hesaplamak için tasarlanmıştır, ancak bunu sanal dosyalarla yapmak dosyaları yine de aktarır. unison ve freefilesync normalde iyi çalışıyor, ancak yüklenen bir dosyayı yeniden adlandırmak istediklerinde bir sorunla karşılaştım, indirme sorunu yok. Bu gvfs 1.6.1 ile ilgili bir sorun olabilir.

4
Papou

Jonas S'nin çözümü duruma bağlı olarak yararlı olabilir, örneğin yüksek bir indirme hızına ve yavaş yüklemeye sahipseniz, sunucudaki dosyaları kontrol etmek gereksiz yere dosya yüklemekten nispeten daha hızlı olabilir.

Muhtemelen CurlFTPFS kullanmak istiyorsunuz: http://packages.ubuntu.com/search?suite=default&section=all&Arch=any&searchon=names&keywords=curlftpfs

Genel olarak rsync yerine normal bir FTP istemcisi kullanmak daha iyidir.

3
user25738

Görevi otomatikleştirmek istiyorsanız, yukarıdaki bazı insanlar gibi bir komut dosyası oluşturabileceğiniz için lftp kullanın, bir kerelik bir çözüm arıyorsanız (yani tüm bir web sitesini indirmeniz gerekiyorsa) ftp/başka bir sunucuya taşıyın) ncftp kullanın, basit, zaten yüklü değilse yükleyin:

apt-get install ncftp

veya

yum install ncftp

(özür dilerim olmayan/Red Hat tabanlı dağıtımlar ..)

kurulduktan sonra terminalde ncftp'yi açın ve şunu yazın:

open -u ftpusername ftp.thedomain.com

Sizden şifreyi soracak, girecek ve daha sonra:

get -R /home/remotewebsite/public_html/ /home/localwebsite/public_html/

Sizin için işi geri kalanı yapacağız .. iyi şanslar

2
desdecode

Bunu yapabileceğinize inanmıyorum, Rsync için çalıştığınız sunucunun sadece bir FTP sunucusu çalışacak, Rsync'in gönderdiği komutları anlamayacak.

Bunu yapmak istemenizin nedeni yalnızca 21 numaralı bağlantı noktasına erişebilmenizdir, ancak sunucunun denetimine sahipseniz, Rsync'in sunucuda dinlediği bağlantı noktasını değiştirebilirsiniz, ancak bu yalnızca, o portta FTP kullanmak istiyorum.

2
Sam Cogan

rclone ftp ve bulut depolama sağlayıcıları (Amazon S3, Dropbox, Google Drive) dahil olmak üzere diğer birçok protokol üzerinden dizin senkronizasyonu yapan güzel bir yazılım parçasıdır. Herhangi bir yerel veya uzak depolama kombinasyonuna/cihazından senkronize edebilir.

ftp uzaktan kumandayı ayarlamak için bu talimatları uygulayın.

Bu yapıldıktan sonra, senkronizasyon işlemi:

rclone sync /home/dir FTP_REMOTE:/home --progress 
1
bernie

“Sitecopy” veya “mirror” kullanmak size çok fazla bant genişliği kazandırabilir.

İkisi de verimli artımlı güncellemeyi ele alır.

1
Kan-Ru Chen

Bunun için kendi komut satırı aracını yaptım: ftpsync

Neden? Basit ve zarif olduğu için, diğer araçlar bazen derleme yapan, bazen çalışmayan çok fazla bağımlılık gerektirir (örneğin MacOs High Sierra'da lftp). Ftpsync saf Python ile yazılmıştır, 3. taraf kütüphaneleri gerektirmez ve küçüktür, dosyayı projenize dahil edebilirsiniz.

Kullanımı: cd proje dizininize ve yazın:

ftpsync user:[email protected]/remote/dir --delete

--delete, yerel olarak bulunmayan uzak dosyaları silmek anlamına gelir.

Senkronize etmek istemiyor, ancak sadece raw ftp komutunu çalıştırın:

ftpsync -c '...'

Dosya gönderme ve yeniden adlandırma gibi bazı basit işlemler için kullanışlıdır:

ftpsync -c 'PASV; TYPE I; STOR some_file.ext; RNFR some_file.ext; RNTO some_file_renamed.ext'
0
superdario128

Ayrıca wput var:

wput --timestamping --reupload --dont-continue source-files ftp://target.Host/dir

Kullanıcı adı ve şifre ~/.netrc adresinden okunur. Aksi takdirde, özellikle güvenlikle ilgilenmiyorsanız, bunları ftp: // kullanıcı adı: [email protected] olarak sağlayabilirsiniz.

0
Ole Wolf