जवाबों:
यदि आपके पास बनाने के लिए अंतिम पत्ती निर्देशिका से अधिक है, तो आप या तो ssh ... mkdir -p
पहले एक अलग चला सकते हैं , या यहां बताए अनुसार --rsync-path
चाल का उपयोग कर सकते हैं :
rsync -a --rsync-path="mkdir -p /tmp/x/y/z/ && rsync" $source user@remote:/tmp/x/y/z/
या --relative
टोनी द्वारा सुझाए गए विकल्प का उपयोग करें । उस स्थिति में, आप केवल गंतव्य की जड़ को निर्दिष्ट करते हैं, जिसका अस्तित्व होना चाहिए, न कि स्रोत की निर्देशिका संरचना, जो बनाई जाएगी:
rsync -a --relative /new/x/y/z/ user@remote:/pre_existing/dir/
इस तरह, आप / pre_existing / dir / new / x / y / z / के साथ समाप्त हो जाएंगे
और यदि आप "y / z /" बनाना चाहते हैं, लेकिन "नया / x /" के अंदर नहीं है, तो आप उस स्थान को जोड़ सकते हैं ./
जहाँ आप जा सकते हैं --relative
:
rsync -a --relative /new/x/./y/z/ user@remote:/pre_existing/dir/
/ pre_existing / dir / y / z / बनाना होगा।
&&
?
मान लें कि आप ss को rsync से कनेक्ट करने के लिए उपयोग कर रहे हैं, इससे पहले ssh कमांड भेजने के बारे में क्या:
ssh user@server mkdir -p existingdir/newdir
यदि यह पहले से मौजूद है, तो कुछ भी नहीं होता है
rsync
, इसलिए, कोई जवाब नहीं।
ssh
समर्थित नहीं है और दूरस्थ छोर पर rsync
जोड़ता है rsync daemon
।
-R, --relative
विकल्प यह कर देगा।
उदाहरण के लिए: यदि आप बैकअप लेना चाहते हैं /var/named/chroot
और रिमोट सर्वर पर समान निर्देशिका संरचना बनाते हैं, -R
तो बस यही करेंगे।
/./
स्रोत पथ का उपयोग करके बनाए जाने वाले पथ के केवल भाग को निर्दिष्ट कर सकते हैं । विवरण के लिए मैन पेज देखें।
rsync
यदि निर्देशिका फ़ोल्डर मौजूद नहीं हैं तो स्वचालित रूप से निर्देशिका नहीं बनाएंगे। आह।
--relative
। यह वह नहीं हो सकता जो आप सोचते हैं।
--relative
के साथ संयोजन के रूप /./
में क्या सबसे newbies के लिए देख रहे हो जाएगा। rsync -avz -e ssh --progress --relative ~/./Desktop/ TARGET_IP:~/
डेस्कटॉप की सामग्री को लक्ष्य डेस्कटॉप पर कॉपी करेगा। यह नहीं जानते कि उपयोगकर्ता नाम में अंतर इसको कैसे प्रभावित कर सकता है।
यह मेरे लिए काम किया:
rsync /dev/null node:existing-dir/new-dir/
मुझे यह संदेश मिला:
skipping non-regular file "null"
लेकिन मैं एक खाली निर्देशिका के चारों ओर घूमने के बारे में चिंता करने की ज़रूरत नहीं है।
मुझे नहीं लगता कि आप इसे एक rsync कमांड के साथ कर सकते हैं, लेकिन आप अतिरिक्त निर्देशिका को पहले इस तरह 'प्री-क्रिएट' कर सकते हैं:
rsync --recursive emptydir/ destination/newdir
जहाँ 'एम्प्टीडिर' एक स्थानीय खाली निर्देशिका है (जिसे आपको पहले अस्थायी निर्देशिका के रूप में बनाना पड़ सकता है)।
यह थोड़ा हैक है, लेकिन यह मेरे लिए काम करता है।
चियर्स
क्रिस
rsync /dev/null node:existing-dir/new-dir/
सुझाव देखें ।
यह उत्तर अन्य उत्तरों के बिट्स का उपयोग करता है, लेकिन उम्मीद है कि यह परिस्थितियों के अनुसार थोड़ा स्पष्ट होगा। आपने कभी भी निर्दिष्ट नहीं किया कि आप क्या रेनसिंग कर रहे थे - एक एकल निर्देशिका प्रविष्टि या कई फाइलें।
तो चलिए मान लेते हैं कि आप एक डायरेक्टरी डायरेक्टरी एंट्री को पार कर रहे हैं, न कि इसमें मौजूद फाइल्स को ले जाने के लिए।
मान लीजिए कि आपके पास स्थानीय रूप से एक निर्देशिका है data/myappdata/
और आपके पास इसके नीचे उपनिर्देशिकाओं का भार है। आपके पास data/
अपनी लक्षित मशीन है लेकिन नहीं data/myappdata/
- यह काफी आसान है:
rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
आप दूरस्थ निर्देशिका के लिए एक अलग नाम का भी उपयोग कर सकते हैं:
rsync -rvv --recursive /path/to/data/myappdata user@host:/remote/path/to/data/newdirname
यदि आप केवल कुछ फ़ाइलें ले जा रहे हैं और निर्देशिका प्रविष्टि को स्थानांतरित नहीं कर रहे हैं, जिसमें वे हैं तो आप करेंगे:
rsync -rvv /path/to/data/myappdata/*.txt user@host:/remote/path/to/data/myappdata/
और यह myappdata
आपकी फ़ाइलों को रखने के लिए दूरस्थ मशीन पर आपके लिए निर्देशिका बनाएगा । फिर से, data/
निर्देशिका को दूरस्थ मशीन पर मौजूद होना चाहिए।
संयोग से, -rvv
झंडे का मेरा उपयोग दोगुना वर्बोज़ आउटपुट प्राप्त करना है, इसलिए यह स्पष्ट है कि यह क्या करता है, साथ ही साथ आवश्यक पुनरावर्ती व्यवहार भी।
बस आपको दिखाने के लिए कि rsync का उपयोग करते समय मुझे क्या मिलेगा (3.0.9 उबंटू 12.04 पर)
$ rsync -rvv *.txt user@remote.machine:/tmp/newdir/
opening connection using: ssh -l user remote.machine rsync --server -vvre.iLsf . /tmp/newdir/
user@remote.machine's password:
sending incremental file list
created directory /tmp/newdir
delta-transmission enabled
bar.txt
foo.txt
total: matches=0 hash_hits=0 false_alarms=0 data=0
आशा है कि यह इसे थोड़ा साफ करता है।
rsync -rvv /path/to/data/myappdata user@host:/remote/path/to/data/myappdata
लेकिन इसे लक्ष्य पर बनाया / रिमोट / पथ / से / डेटा / myappdata / myappdata /
rsync -rvv /path/to/data/myappdata/ user@host:/remote/path/to/data/myappdata
mkdir
, इसलिए मैं हैक का उपयोग कर रहा हूं:--rsync-path="echo f > /public/.keep && rsync /public/.keep /public/newfolder/ && rsync" \
यह एक अतिरिक्त फाइल बनाता है लेकिन आप बाद में हटा सकते हैं।