FTP पर rsync का उपयोग कैसे करें


187

कोई भी यूनिक्स:

मेरे पास निम्न cmd लाइन है जो ठीक काम करती है।

rsync -avr -e ssh /home/dir user@example.com:/home/

लेकिन मुझे इसे अब एक दूरस्थ सर्वर पर rsync करने के लिए सेट करने की आवश्यकता है जिसमें केवल उस पर एक FTP सर्वर है। मैं उसे करके देखूं तो?

मैंने rsync सहायता को देखा, लेकिन जल्दी ही खो गया (मैं यह सामान बहुत बार नहीं करता)।


21
यह आईआरसी से अधिक HTTP का उपयोग कैसे करें, या SMTP पर FTP का उपयोग कैसे करें, यह पूछने के लिए एक जैसा है ...
जूलियानो

2
हो सकता है कि आप ऐसा करने के लिए अपने कुछ तर्क समझा सकें, फिर हम आपको एक व्यवहार्य समाधान के साथ आने में मदद कर सकते हैं।
जेम्स

1
अनिवार्य रूप से मैं एक साझा होस्टिंग सर्वर से एक बैकअप को स्वचालित करने की कोशिश कर रहा था, और समझ नहीं आया कि rsync ने कैसे काम किया। मैं अब vps में चला गया हूं, और अब ftp की सीमा नहीं है
बम्परबॉक्स

दोहरेपन अपने भगवान नहीं है: scie.nti.st/2013/4/13/...
user956584

यदि तैनाती है, आपके मन में क्या है, और आप NodeJS कोई आपत्ति नहीं है, बाहर की जाँच dploy , आलसी और Git के साथ अच्छी तरह से काम करता है
फ्रैंक Nocke

जवाबों:


78

तुम नहीं। rsync आपके लिए ऐसा नहीं कर सकता, यह अपने आप में एक प्रोटोकॉल है और एफ़टीपी पर काम नहीं करता है।

हालाँकि, आप csync की कोशिश कर सकते हैं । IIRC यह HTTP पर rsync की तरह व्यवहार प्रदान करता है। मैं इस पर टिप्पणी नहीं कर सकता कि क्या यह एफ़टीपी पर काम करता है, आपको इसे आज़माना होगा।


1
Csync वेब पेज को देखते हुए , यह sftp को सपोर्ट करता है, लेकिन सादे ftp के लिए समर्थन का कोई उल्लेख नहीं है।
कीथ थॉम्पसन

162

दूसरों द्वारा बताए गए कारणों के लिए rsync आपके लिए काम नहीं कर रहा है। हालांकि, lftp और ncftp दोनों में "मिरर" मोड हैं जो संभवतः आपकी आवश्यकताओं को पूरा करेंगे।

मैं अपने स्थानीय निर्देशिका से किसी ftp या sftp वेब होस्ट पर सामान को पुश करने के लिए इसका उपयोग करता हूं:

lftp -c "set ftp:list-options -a;
open ftp://user:password@your.ftp.com; 
lcd ./web;
cd /web/public_html;
mirror --reverse --delete --use-cache --verbose --allow-chown  
--allow-suid --no-umask --parallel=2 --exclude-glob .svn"

2
lftp बहुत अच्छा है। एक और मैं बस के बारे में पता चला है wputजो अंतर्निहित बैंडविड्थ सीमित है।
कर्मकाज़े

122

जैसा कि चित्रफलक द्वारा लिखा गया है , lftpएक अच्छा उपकरण है।

मैं आपको स्क्रिप्ट को परिमार्जित करने, और उपयोग करने का सुझाव देता हूं

exclude-glob

विकल्प, जो आपके शेल के ग्लोब फ़ीचर (* ,? ..) का उपयोग करके फ़ाइल नाम शामिल करता है:

#!/bin/bash    
HOST="your.ftp.host.dom"
USER="username"
PASS="password"
FTPURL="ftp://$USER:$PASS@$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"

चेतावनी: सुनिश्चित करें कि लक्ष्य निर्देशिका मौजूद है, अन्यथा सीडी कमांड विफल हो जाएगी, इसलिए फाइलों के पेड़ों को हटाने सहित संचालन गलत निर्देशिका (रूट) पर होगा!

मैंने स्क्रिप्ट को अपडेट किया है ताकि --deleteविकल्प डिफॉस्ट द्वारा अक्षम हो, इसे अनइंस्टॉल करके सक्षम करें DELETE= command


एक बेहतरीन गुच्छा बनाने में मेरी मदद की। लेकिन मुझे "सेट ftp: सूची-विकल्प -a;" हटाना पड़ा जो सामान गड़बड़ कर रहा है।
मैट

1
क्या ऐसा कुछ है जो SFTP (FTPS?) पर एक ही काम करता है?
trusktr

1
मैं ऐसा पहले करूंगा cd $RCD, ताकि गलती से निर्देशिका को गलत निर्देशिका से हटाने के साथ स्क्रिप्ट-ए-टाइपो को रोका जा सके set cmd:fail-exit yes:। (ऐसा lftpनहीं लगता है कि यह वास्तव में बाहर निकल गया है, जब तक आप अगली कमांड जारी नहीं करते।) - और इससे पहले कि cd $LCDमैं ऐसा करता (स्थानीय शेल में, जो कि शीर्ष के शीर्ष पर है) set -eu:।
काजमगनस

3
दरअसल, पहली बार जब मैंने अपनी स्क्रिप्ट को चलाया, तो मैंने अभी तक रिमोट डायरेक्टरी नहीं बनाई थी, इसलिए स्क्रिप्ट उस गैर-मौजूदा डायर में सीडी करने में विफल रही। फिर स्क्रिप्ट शुरू हुई mirrorऔर इस प्रकार --delete: d फाइलें गलत dir से। (लेकिन मैंने उन्हें फिर से कॉपी किया, इसलिए उस मामले में यह कोई मायने नहीं रखता था। शायद यह किसी और के लिए भी मायने रखता है।)
काजमगनस

1
@KajMagnus की 'set -eu' और 'cd $ LCD' का उपयोग करने के बारे में सलाह के बाद, 'cd $ LCD' से पहले 'mkdir -p $ LCD' जोड़ें - इस तरह आप सुनिश्चित कर सकते हैं कि निर्देशिका मौजूद है और आप ' इसमें फिर से।
पॉल गियर

25

वास्तव में आप जो करने की कोशिश कर रहे हैं उसके आधार पर, एक और पूरी तरह से अलग दृष्टिकोण का उपयोग curlftpsएक ftp फ़ोल्डर को माउंट करने के लिए किया जा सकता है , और फिर शायद rsyncदो "स्थानीय" फ़ोल्डर।

आपके डिस्ट्रो के आधार पर इंस्टॉलेशन अलग है इसलिए मैं उस पर सामान्यीकरण नहीं कर सकता, लेकिन आपको इंस्टॉल करने की आवश्यकता है fuseऔर curlftpfs(जाहिर तौर पर डेबियन पहले से ही fuseडिफ़ॉल्ट रूप से इंस्टॉल हो चुका है ), फिर:

  1. sudo apt-get install curlftpfs

  2. सुनिश्चित करें कि fuseमॉड्यूल लोड है ( modprobe fuse)

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

ध्यान दें कि अंतिम अल्पविराम (यह एक टाइपो नहीं है!) के बाद कोई स्थान नहीं है। यदि आप इससे संतुष्ट हैं या हर बार ऐसा नहीं करना चाहते हैं, तो आप इसे अपने fstab (आमतौर पर /etc/fstab) में जोड़ सकते हैं :

curlftpfs#user:password@ftp.yourserver.com /path/to/ftp/folder/ fuse auto,user,uid=1000,allow_other 0 0

उस स्थिति में, आपको यह सुनिश्चित करना होगा कि फ्यूज मॉड्यूल को पहले लोड किया गया है।

हालांकि, दो बातों की सलाह दें:

  • डेवलपर ने एक या दो साल पहले परियोजना को गिरा दिया, इसलिए मुझे नहीं पता कि इस समय के लिए कितना उपयोगी / स्थिर है।
  • यदि पासवर्ड में एक अजीब चरित्र है, तो curlftpfsवह विफल हो सकता है (शायद आप कुछ कर सकते हैं .netrc)।

एफ़टीपी फ़्यूज़ और rsync प्रश्न के सबसे करीब है, लेकिन स्पष्ट रूप से कुछ भी लेकिन छोटे फ़ाइलों के एक छोटे सेट पर पागल है।
स्टीव-ओ

1
यह पागल क्यों होगा? डिफ़ॉल्ट रूप से rsync स्टेट () के अनुसार, यह सामग्री की तुलना नहीं करता है। जिसे ls -l द्वारा ftp क्लाइंट के साथ किया जा सकता है।
१०:११

मैंने वास्तव में (rsnapshot के माध्यम से) यह कोशिश की और यह काम नहीं किया, प्रत्येक फ़ाइल लौटी और त्रुटि हुई, यह दिखाते हुए कि rsync लिंक नहीं बना सका। तो rsnapshot के साथ संयोजन में lftp का उपयोग करने की चाल
चली

14.04 एलटीएस पर निर्दोष; एक अतिरिक्त टिप: जब आप अपनी एफ़टीपी साइट को अनमाउंट करने के लिए तैयार होते हैं तो बस उपयोग करें umount DIRकि DIRआपका /path/to/ftp/folderऊपर कहाँ था ।
जो

1
2017, और यह अभी भी काम करता है! ईमानदारी से एक एफ़टीपी साइट से फ़ाइलों की प्रतिलिपि बनाने का सबसे आसान तरीका। स्थानीय रूप से माउंट करें, फिर rsync जैसे कि यह स्थानीय था
td512

16

वहाँ मातम है ...

वेक्स एक उपयोगिता है जिसे वेब पेज या अन्य FTP संग्रह को दूरस्थ रूप से बनाए रखने के कार्य को स्वचालित करने के लिए डिज़ाइन किया गया है। यह अपलोड और रिमोट डिलीट को आवश्यकतानुसार एक स्थानीय सर्वर के एक सेट को रिमोट सर्वर पर सिंक्रोनाइज़ करेगा।


2
आकर्षण जैसा काम करता है! आप इसे इस तरह से चला रहे हैं: $ weex yourFTPconfigNameयहाँ मैनुअल linuxcertif.com/man/1/weex
sobi3ch

9

rsync ftp पर काम नहीं करता है। दूरस्थ पक्ष पर इसे या तो rsync डेमॉन या शेल की आवश्यकता होती है जिसे वह rsync से कॉल कर सकता है। फीटप आमतौर पर आपको कुछ कमांड को कॉल करने की अनुमति देता है और rsync उनमें से एक नहीं है। "Lftp" जैसे ftp कार्यों को स्वचालित करने के लिए अन्य उपकरण हैं।


8

यह एक अच्छा और मुफ्त फिट लगता है: https://savannah.gnu.org/projects/ftpsync/


1
टच- ऑफ -ए-ए-दस-फुट-पोल के स्टीमिंग ढेर को देखते हुए SourceForge हाल ही में बन गया है, शायद आपको प्रोजेक्ट के वेबपेज का लिंक अपडेट करना चाहिए ।
हॉपलेसनब बी

7

ऐसा प्रतीत होता है कि आप क्या करने की कोशिश कर रहे हैं, आप भी इस्तेमाल कर सकते हैं।

wget -m ftp: // उपयोगकर्ता नाम: password@domain.com


यह केवल साइट का दर्पण बना देगा। आप अपने संशोधनों को अपलोड करने के लिए इसका उपयोग नहीं कर सकते।
डेविड वी।

5

Http://luxux.die.net/man/1/curlftpfs के बाद आप ftp को माउंट करने और rsync का उपयोग कर सकते हैं


ServerFault में आपका स्वागत है! यह एक अच्छी शुरुआत हो सकती है, लेकिन कुछ और तकनीकी विवरण के रूप में क्यों यह एक बेहतर दृष्टिकोण है, और संभवतः यह कैसे करना है, यह उचित होगा।
स्कॉट पैक

4

मैं GVFS / FTP का उपयोग कर रहा हूं। मैं अपने दूरस्थ FTP सर्वर को जिगोलो के साथ माउंट करता हूं। जैसा कि उन्हें स्थानीय निर्देशिकाओं के रूप में देखा जाता है, स्थानीय फाइलों पर काम करने वाली लगभग कुछ भी। rsync को फाइल को बिना ट्रांसफर किए फाइल की तुलना करने के लिए दूरस्थ रूप से फाइल हैश की गणना करने के लिए डिज़ाइन किया गया है, लेकिन वर्चुअल फ़ाइलों के साथ ऐसा करना फ़ाइलों को वैसे भी स्थानांतरित करता है। Unison और freefilesync आम तौर पर अच्छी तरह से काम करते हैं, लेकिन मैं एक समस्या से मिला, जब वे एक फ़ाइल तेरा अपलोड, कोई समस्या नहीं डाउनलोड करने का नाम बदलना चाहते हैं। यह gvfs 1.6.1 के साथ एक समस्या हो सकती है।


3

जोनास एस का समाधान परिस्थिति के आधार पर उपयोगी हो सकता है, उदाहरण के लिए यदि आपके पास उच्च डाउनलोड गति और धीमी अपलोड है, तो सर्वर पर फ़ाइलों की जाँच करना अनावश्यक रूप से फ़ाइलों को अपलोड करने की तुलना में अपेक्षाकृत तेज़ हो सकता है।

आप शायद CurlFTPFS का उपयोग करना चाहते हैं, हालांकि: http://packages.ubuntu.com/search?suite=default§ion=all&arch=any&searchon=names&keywords=curlftpfs

हालांकि, आम तौर पर, rsync के बजाय एक नियमित एफ़टीपी ग्राहक का उपयोग करना बेहतर होता है।


2

मुझे विश्वास नहीं है कि आप ऐसा करने में सक्षम होंगे, जिस सर्वर के लिए आप रुपये का उपयोग करने की कोशिश कर रहे हैं, उसमें केवल एक एफ़टीपी सर्वर चल रहा होगा, यह उन कमांड को नहीं समझेगा कि रुसक इसे भेज रहा है।

यदि आप ऐसा करना चाहते हैं, तो यह है कि आपके पास केवल पोर्ट 21 तक पहुंच है, लेकिन आपके पास सर्वर का नियंत्रण है, आप सर्वर पर पोर्ट रुपये को सुन सकते हैं, लेकिन यह स्पष्ट रूप से केवल उपयोगी है यदि आप नहीं करते हैं उस पोर्ट पर FTP का उपयोग करना चाहते हैं।


2

यदि आप कार्य को स्वचालित करना चाहते हैं, तो lftp का उपयोग करें क्योंकि आप एक स्क्रिप्ट बना सकते हैं जैसा कि कुछ लोगों ने ऊपर पोस्ट किया है, आप इसे अपनी पसंद के अनुसार वास्तव में आसानी से स्क्रिप्ट कर सकते हैं, यदि आपकी एक समय समाधान की तलाश है (यानी आपको पूरी वेबसाइट डाउनलोड करने की आवश्यकता है ftp के माध्यम से / इसे किसी अन्य सर्वर पर ले जाएं) ncftp का उपयोग करें, इसका सरल, इसे स्थापित करें यदि इसकी पहले से स्थापित नहीं है:

apt-get install ncftp

या

yum install ncftp

(सॉरी नॉन डेबियन / रेड हैट डिस्ट्रोस ..)

एक बार स्थापित होने के बाद, टर्मिनल में एनसीएफटीपी खोलें:

open -u ftpusername ftp.thedomain.com

यह आपसे पासवर्ड मांगेगा, इसे दर्ज करें, और फिर:

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

यह आप के लिए काम pf बाकी करेंगे .. सौभाग्य



0

वहाँ भी विप्र है:

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

उपयोगकर्ता नाम और पासवर्ड ~ / .netrc से पढ़े जाते हैं। अन्यथा, यदि आप सुरक्षा से विशेष रूप से चिंतित नहीं हैं, तो आप उन्हें ftp: // उपयोगकर्ता नाम: password@target.host के रूप में आपूर्ति कर सकते हैं


0

मैंने उसके लिए खुद का कमांड-लाइन टूल बनाया: ftpsync

क्यों? क्योंकि यह सरल और सुरुचिपूर्ण है, अन्य उपकरणों के लिए बहुत अधिक निर्भरता की आवश्यकता होती है, कभी-कभी संकलन, कभी-कभी काम नहीं करता है (उदाहरण के लिए मैको सिएरा पर lftp)। Ftpsync शुद्ध पायथन में लिखा गया है, इसमें 3 पार्टी लिब की आवश्यकता नहीं है और यह छोटा है, आप बस अपने प्रोजेक्ट में फ़ाइल शामिल कर सकते हैं।

अपनी परियोजना निर्देशिका और प्रकार के लिए सीडी:

ftpsync user:pass@ftp.address.url/remote/dir --delete

--delete दूरस्थ फ़ाइलों को हटाने के लिए खड़ा है जो स्थानीय रूप से मौजूद नहीं हैं।

यदि आप सिंक नहीं करना चाहते हैं, लेकिन बस कच्चे ftp कमांड का उपयोग करें:

ftpsync -c '...'

यह कुछ सरल कार्यों के लिए उपयोगी है जैसे फ़ाइल भेजना और उसका नाम बदलना:

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

दूसरों की तरह ही इस कारण से ठोकर खाई। एफ़टीपी प्रोटोकॉल पर एक अच्छी सिंक उपयोगिता की आवश्यकता है। आपका उपकरण अच्छा लग रहा है, लेकिन मैं इसे उपयोग करने के लिए नहीं रख सकता, क्योंकि मेरी आवश्यकता स्थानीय से रिमोट और सिंक से डाउनलोड करने की है। मैं पहले से डाउनलोड की गई फ़ाइलों को डाउनलोड करने से बचना चाहता हूं। स्थानीय पर मैं डाउनलोड की गई फ़ाइलों पर एक प्रसंस्करण करता हूं जो इसे अलग बनाता है; अगली बार जब एफ़टीपी स्क्रिप्ट चलती है तो उसे छोड़ देना चाहिए। फिलहाल मुश्किल समय का हल मिल रहा है।
अनूप

हां, वास्तव में यह एक तरफा सिंक है।
सुपरडारियो128

0

rclone सॉफ्टवेयर का एक अच्छा टुकड़ा है जो ftp पर डायरेक्टरी सिंक्रोनाइज़ेशन करता है और क्लाउड स्टोरेज प्रोवाइडर्स (Amazon S3, Dropbox, Google Drive) सहित कई अन्य प्रोटोकॉल। यह स्थानीय या दूरस्थ भंडारण के किसी भी संयोजन से / को सिंक्रनाइज़ कर सकता है।

ftpरिमोट सेटअप करने के लिए इन निर्देशों का पालन करें

एक बार ऐसा करने के बाद, सिंक ऑपरेशन होता है:

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

-7

Sftp स्थापित करें और फिर आप rsync का उपयोग कर सकते हैं।

मैं निम्नलिखित का उपयोग करता हूं।

rsync --delete --times --recursive --perms --owner --group --verbose --progress --stats -e ssh root@192.168.0.100:/folder1/ /folder2/

7
यही कारण है कि है नहीं यह शायद SSH को SFTP उपतंत्र आंतरिक उपयोग करता FTP (कम से कम है कि क्या यह डिफ़ॉल्ट config में करता है)
serverhorror

csync (sftp) और rsync काम करने का एक ही तरीका हो सकता है
रजत
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.