फ़ोल्डरों को मर्ज करें और CLI का उपयोग करके फ़ाइलों को बदलें


9

मैं कुछ फोरम सॉफ्टवेयर को अपडेट करना चाहता हूं और मैं एक सीखने की संभावना के रूप में सीएलआई का उपयोग करके अपग्रेड प्रक्रिया का परीक्षण करना चाहता हूं।

मैं एक फ़ोल्डर की सामग्री को दूसरे फ़ोल्डर में कैसे विलय करूं और फाइलों को बदल दूं?

जवाबों:


10

आप ऐसा करने के rsyncलिए उपयोग कर सकते हैं :

$ rsync -abviuzP src/ dest/
  • -aसंग्रह मोड; बराबर- surptgoDD (no -H, -A -X)
  • -i आइटम स्वरूपित पर चालू होता है, जो डिफ़ॉल्ट प्रारूप की तुलना में अधिक जानकारी दिखाता है
  • -brsync बैकअप फ़ाइलों को बनाता है जो कि दोनों फ़ोल्डरों में मौजूद हैं, जो कि पुरानी फ़ाइल में है। आप इस प्रत्यय को --suffix .suf से नियंत्रित कर सकते हैं
  • -u rsync ट्रांसफ़र स्किप फ़ाइलों को बनाता है जो src की तुलना में भाग्य में नए हैं
  • -z संपीड़न पर मुड़ता है, जो धीमी लिंक पर आसानी से संपीड़ित फ़ाइलों को स्थानांतरित करते समय उपयोगी होता है
  • -P ऑनपार्टियल और --प्रोग्रेस चालू करता है
    • --partial यदि हस्तांतरण बाधित है, तो rsync आंशिक रूप से स्थानांतरित फ़ाइलों को रखता है
    • --progress यदि आप बड़ी फ़ाइलों को स्थानांतरित करते हैं, तो प्रत्येक हस्तांतरण के लिए एक प्रगति बार दिखाता है

मैं इनमें से कई स्विच छोड़ दूंगा, लेकिन यह आपको शुरू करने के लिए है। मैं शायद कुछ इस तरह का उपयोग करेंगे:

$ rsync -abuP src/ dest/

एक बार ठीक लगने के बाद, आप बैकअप फ़ाइलों को हटाने के लिए इस कमांड को चला सकते हैं:

$ find dest/ -name "*.~" -delete

उदाहरण

आइए दिखाते हैं कि हमारे पास निम्नलिखित नमूना डेटा हैं।

मूल डेटा

हम कुछ नकली डेटा बनाने के लिए निम्न कमांड का उपयोग करेंगे।

$ seq 10 | xargs -I{} -- mkdir dest/dir{}
$ for i in $(seq 5); do echo "$i" > dest/dir$i/file$i;done

नकली डेटा इस प्रकार दिखता है:

$ tree -DsifvF --noreport dest/
dest
[       4096 Aug 29 22:21]  dest/dir1/
[          2 Aug 29 22:21]  dest/dir1/file1
[       4096 Aug 29 22:21]  dest/dir2/
[          2 Aug 29 22:21]  dest/dir2/file2
[       4096 Aug 29 22:21]  dest/dir3/
[          2 Aug 29 22:21]  dest/dir3/file3
[       4096 Aug 29 22:21]  dest/dir4/
[          2 Aug 29 22:21]  dest/dir4/file4
[       4096 Aug 29 22:21]  dest/dir5/
[          2 Aug 29 22:21]  dest/dir5/file5

नए आंकड़े

अब हम मूल डेटा ( dest/*-> src/) को दोहराएंगे और मिश्रण में कुछ नई फ़ाइलों को जोड़ेंगे। यह "नई रिलीज़" का अनुकरण करता है।

$ cp -pr dest/* src/
$ mkdir src/dir11
$ for i in 1 3 5 11; do echo "$i$i" > src/dir$i/file$i;done

नकली डेटा इस प्रकार दिखता है:

$ tree -DsifvF --noreport src/
src
[       4096 Aug 29 22:21]  src/dir1/
[          3 Aug 29 23:00]  src/dir1/file1
[       4096 Aug 29 22:21]  src/dir2/
[          2 Aug 29 22:21]  src/dir2/file2
[       4096 Aug 29 22:21]  src/dir3/
[          3 Aug 29 23:00]  src/dir3/file3
[       4096 Aug 29 22:21]  src/dir4/
[          2 Aug 29 22:21]  src/dir4/file4
[       4096 Aug 29 22:21]  src/dir5/
[          3 Aug 29 23:00]  src/dir5/file5
[       4096 Aug 29 23:00]  src/dir11/
[          5 Aug 29 23:00]  src/dir11/file11

मर्ज src / में भाग्य /

यह नकल करता है कि हम सिर्फ अपने नए सॉफ्टवेयर ट्री को सेटअप करते हैं src/और अपनी पूर्व-मौजूदा निर्देशिका में विलय करना चाहते हैं dest/

$ rsync -abuP src/ dest/
sending incremental file list
dir1/file1
           3 100%    0.00kB/s    0:00:00 (xfer#1, to-check=5/13)
dir11/
dir11/file11
           5 100%    4.88kB/s    0:00:00 (xfer#2, to-check=4/13)
dir3/file3
           3 100%    2.93kB/s    0:00:00 (xfer#3, to-check=2/13)
dir5/file5
           3 100%    2.93kB/s    0:00:00 (xfer#4, to-check=0/13)

sent 416 bytes  received 97 bytes  1026.00 bytes/sec
total size is 18  speedup is 0.04

जैसा कि आप देख सकते हैं कि निम्न फाइलें अपडेट की गई थीं, file1, file3, file5 और नई जोड़ी गई dir11 + file11।

और पुष्टि के रूप में हम देख सकते हैं कि निम्न बैकअप फ़ाइलों को rsyncतब बनाया गया था जब इसमें पहले से मौजूद फ़ाइलों का सामना करना पड़ा था dest/

$ find dest/ | grep "~"
dest/dir3/file3~
dest/dir1/file1~
dest/dir5/file5~

उपरोक्त बिंदु को स्पष्ट करने के लिए: एक बार यह ठीक लगने के बाद, आप बैकअप फ़ाइलों को हटाने के लिए इस कमांड को चला सकते हैं:> $ find dest / -name "start dot ~" -delete यह मेरे लिए काम नहीं करता था, जबकि:> $ डेस्ट / -नाम "स्टार्ट डॉट स्टार ~" -delete किया। यकीन है कि अगर एक टाइपो या कुछ और सही मेरे अंत सेट नहीं है!

2

आप cp -r name_of_the_folder / * name_of_the_destination_folder का उपयोग कर सकते हैं, जहां तारांकन चिह्न (*) सभी फ़ाइलों और पुनरावर्ती प्रतिलिपि के लिए -r के लिए खड़ा है।

आप -i विकल्प का भी उपयोग कर सकते हैं जो आपसे पूछेगा कि क्या आप सामग्री को अधिलेखित करना चाहते हैं।

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