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).
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.
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"
şö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
.
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:
Sudo apt-get install curlftpfs
Fuse
modülünün yüklendiğinden emin olun (modprobe Fuse
)
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:
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.
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.
Bu iyi ve özgür bir uyum gibi görünüyor: https://savannah.gnu.org/projects/ftpsync/
Yapmaya çalıştığınız şey için wget'i de kullanabilirsiniz.
Ftp'yi bağlamak için curlftpfs komutunu kullanabilir ve http://linux.die.net/man/1/curlftpfs sonrasında rsync kullanabilirsiniz
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.
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§ion=all&Arch=any&searchon=names&keywords=curlftpfs
Genel olarak rsync yerine normal bir FTP istemcisi kullanmak daha iyidir.
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
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.
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
“Sitecopy” veya “mirror” kullanmak size çok fazla bant genişliği kazandırabilir.
İkisi de verimli artımlı güncellemeyi ele alır.
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'
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.