गंतव्य निर्देशिका में सामग्री को प्रतिस्थापित किए बिना मैं उसी नाम की निर्देशिका में संपूर्ण निर्देशिका की प्रतिलिपि कैसे बना सकता हूं? (इसके बजाय, मैं गंतव्य फ़ोल्डर की सामग्री में जोड़ना चाहूंगा)
गंतव्य निर्देशिका में सामग्री को प्रतिस्थापित किए बिना मैं उसी नाम की निर्देशिका में संपूर्ण निर्देशिका की प्रतिलिपि कैसे बना सकता हूं? (इसके बजाय, मैं गंतव्य फ़ोल्डर की सामग्री में जोड़ना चाहूंगा)
जवाबों:
उपयोग करें rsync, और पास करें -uयदि आप केवल उन फ़ाइलों को अपडेट करना चाहते हैं जो मूल निर्देशिका में नए हैं, या --ignore-existingगंतव्य में पहले से मौजूद सभी फ़ाइलों को छोड़ दें।
rsync -au /local/directory/ host:/remote/directory/
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
( /स्रोत पक्ष पर ध्यान दें : इसके बिना यह rsyncबनाएगा /remote/directory/directory।)
--ignore-existingजोड़ने के बिना जोड़ता है, क्या डेटा हानि देखते हैं?
rsyncआसानी से उपलब्ध नहीं है .... (जैसे Win32-OpenSSH)
--rsync-pathआवश्यक है)
यदि आपके पास उन्हें लिखने की अनुमति है, तो scp फाइलों को अधिलेखित कर देगा।
दूसरे शब्दों में: आप scpअस्थायी रूप से उन पर लिखी अनुमतियों को हटाकर (यदि आप फ़ाइलों के स्वामी हैं, तो) को प्रभावी ढंग से स्किप कर सकते हैं ।
scp -r user@server.com:/location/of/files/* /local/location/
आप केवल नई फ़ाइलों को कॉपी कर सकते हैं। उपयोगfind
scp `find /data/*.gz -type f -mtime +7` USER@SERVER:/backup/
यदि आप गंतव्य फ़ाइल सामग्री को केवल पढ़ने के लिए बना सकते हैं:
find . -type f -exec chmod a-w '{}' \;
चलने से पहले scp(यह मौजूदा फ़ाइलों को शिकायत करेगा और छोड़ देगा)।
और उन्हें बाद में बदल दें ( chmod +wumask आधारित मूल्य प्राप्त करने के लिए)। यदि फ़ाइलों में आपके umask के अनुसार सभी अनुमति नहीं है, तो आपको किसी तरह अनुमतियों को संग्रहीत करना होगा ताकि आप उन्हें पुनर्स्थापित कर सकें।
(गिल्स का उत्तर मौजूदा फ़ाइलों को ओवरराइट कर देता है यदि स्थानीय रूप से वे नए हैं, तो मैंने इस तरह से मूल्यवान डेटा खो दिया है। समझ में नहीं आता कि क्यों गलत और हानिकारक उत्तर में बहुत सारे वोट हैं)।
rsync --ignore-existingआपने डेटा खोने का कारण कैसे बनाया ?
find: missing argument to '-exec'इस कमांड का उपयोग करने में त्रुटि हुई , और इसके बजाय उपयोग करना था find . -type f -exec chmod a-w {} \;:। मेरा linux बुरा है, ymmv।
find . -type f -exec chmod a-w {} \;
मैं एक ऐसी ही चुनौती थी, मेरे मामले में मैं का उपयोग नहीं कर सकता है rsync, csyncया फ्यूज क्योंकि मेरे भंडारण केवल SFTP है। rsyncफ़ाइल के लिए दिनांक और समय नहीं बदल सका, कुछ अन्य उपयोगिताओं (जैसे csync) ने मुझे अन्य त्रुटियां दिखाईं: " अस्थायी फ़ाइल बनाने में असमर्थ घड़ी का तिरछा पता चला "।
यदि आपके पास स्टोरेज-सर्वर तक पहुंच है - बस यहां एक डेमॉन के रूप में स्थापित openssh-serverया लॉन्च rsyncकरें।
मेरे मामले में - मैं ऐसा नहीं कर सका और समाधान था: lftp । lftpसिंक्रनाइज़ेशन के लिए उपयोग निम्न है:
lftp -c "open -u login,password sftp://sft.domain.tld/; \
mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"
/src/folder- मेरे पीसी पर फ़ोल्डर है, /rem/folder- है sftp://sft.domain.tld/rem/folder।
आप लिंक द्वारा मैन पेज पा सकते हैं: http://lftp.yar.ru/lftp-man.html
फ़ाइलों का एक पूरा गुच्छा कॉपी करने के लिए, उन्हें फाड़ना अधिक तेज़ है। -K का उपयोग करके आप टार को ओवरराइटिंग फ़ाइलों से भी रोकते हैं जब इसे लक्ष्य प्रणाली पर अनपैक किया जाता है।
tar -c <source-dir> | ssh <name>@<host> 'tar -kxzf - -C <target-dir>'
scpफ़ाइलों को अधिलेखित कर देता है और ऐसा करने से रोकने के लिए कोई स्विच नहीं है, लेकिन आप चीजों को बाहर की तरह कॉपी कर सकते हैं, scp कर सकते हैं और फिर मौजूदा फ़ाइलों को वापस कॉपी कर सकते हैं। उदाहरण:
सभी मौजूदा फ़ाइलों को कॉपी करें
mkdir original_files ; cp -r * original_files/
Scp का उपयोग करके सब कुछ कॉपी करें
scp -r user@server:dir/* ./
किसी भी scp पर लिखी गई मूल फाइलों को कॉपी करें:
cp -r original_files/* ./
इसे प्राप्त करने का दूसरा तरीका lsगंतव्य फ़ोल्डर पर करना है:
दूरस्थ गंतव्य फ़ोल्डर पर:
ls | awk '{print "mv " $1 " ../copied_data/"}' > mv_copied_data
scp mv_copied_data user@source.server.com:/path/to/source/folder
स्रोत पर:
cd /path/to/source/folder
chmod 777 mv_copied_data
./mv_copied_data
गंतव्य पर:
scp -r user@source.server.com:/path/to/source/folder /path/to/destination/foldeer
- >स्थान न्यूलाइन या अन्य विशेष वर्ण हैं। 3. एक अजगर स्क्रिप्ट में एक लूप के लिए हार्ड-कोड। बहुत सारे कारणों से रनटाइम पर प्रोग्राम बनाना कठिन और मुश्किल काम है (पेशेवर प्रोग्रामर द्वारा किया जाता है)। एक शेल स्क्रिप्ट उत्पन्न करना और भी बुरा है - एक भयानक विचार।