जब मैं USB कुंजी पर rsync करता हूं तो मैं कॉलन को कैसे प्रतिस्थापित कर सकता हूं?


12

मैं एक USB कुंजी पर अपनी मेल निर्देशिका का बैकअप लेना चाहूंगा। हालाँकि, मेरे IMAP में एक अजीब नामकरण सम्मेलन है जिसमें कुछ एक बृहदान्त्र (:) वर्ण शामिल है। चूंकि USB एक विंडो फॉर्मेट में है, rsync उन फाइल को बनाने में विफल रहता है। क्या rsync चलाते समय अंडरस्कोर द्वारा कॉलोन वर्ण को बदलने का कोई तरीका है? (या एक ही उपकरण के साथ एक ही सिंक्रनाइज़ेशन करने के लिए?)

बस कुछ बिंदु जो मैंने टिप्पणियों में स्पष्ट किए हैं:

  • यह सबसे खराब स्थिति वाला बैकअप है, मैं इसे बिना किसी इंस्टालेशन के विंडोज़ मशीन पर पढ़ना चाहूंगा।
  • मुझे बहुत सारे डेटा मिले जो स्थिर रहते हैं। इसलिए मेरे पास बहुत समय बचता है अगर मेरे पास एक उपकरण है जो सिर्फ नई फ़ाइलों को कॉपी करता है।
  • मैं rsync के पुनर्लेखन के लिए नहीं देख रहा हूँ। मैं एक मौजूदा टूल की तलाश कर रहा हूं जिसका उपयोग बॉक्स से बाहर किया जा सके।

धन्यवाद

जवाबों:


8

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


6

सबसे सरल दृष्टिकोण फ़ाइल नामों को बदलने के लिए फाइल सिस्टम परत का लाभ उठाना है। Ubuntu 12.04 के बाद से, एक FUSE फाइल सिस्टम है जो फ़ाइल नामों को उन नामों में परिवर्तित करता है जो विंडोज के VFAT का समर्थन करता है: फ्यूज-पॉज़िक्सॉवल फ़्यूज़-पॉज़िकोव्ल स्थापित करें

sudo mount.posixovl /media/sdb1
chown guillaume /media/sdb1
rsync -au ~/mail /media/sbd1/

या रूट एक्सेस की आवश्यकता से बचने के लिए:

mkdir ~/mnt
/sbin/mount.posixovl -S /media/sdb1 ~/mnt
rsync -au ~/mail ~/mnt/

फ़ाइल नाम है कि VFAT स्वीकार नहीं करता है में पात्रों के रूप में इनकोड %(XX)जहां XXहेक्साडेसिमल अंक हैं। POSIXovl 1.2.20120215 के अनुसार, सावधान रहें कि जैसे कोई फ़ाइल नाम %(3A)स्वयं के रूप में एन्कोड किया गया है, और के रूप में डीकोड किया जाएगा :, इसलिए यदि आपके पास फ़ॉर्म के सबस्ट्रिंग वाले फ़ाइल नाम हैं तो टकराव का जोखिम है %(XX)

खबरदार कि POSIXovl फ़ाइल नामों के साथ सामना नहीं करता है जो बहुत लंबे हैं। यदि एन्कोडेड नाम 255 वर्णों में फिट नहीं है, तो फ़ाइल संग्रहीत नहीं की जा सकती।

POSIXovl नामक फाइलों में यूनिक्स की अनुमति और स्वामित्व संग्रहीत करता है .pxovl.FILENAME


निम्न बैश script4 स्क्रिप्ट की प्रतिलिपि बनाता ~/mail/foo:barहै /media/usb99/mail/foo_bar, और इसी तरह सभी फाइलों के लिए ~/mail। गंतव्य ट्री में मौजूद फ़ाइलें और जो स्रोत से पुरानी नहीं हैं, उन्हें छोड़ दिया गया है।

#!/bin/bash
set -e
shopt -s dotglob globstar
for source in "$HOME"/mail/**/*; do
  target=/media/usb99/${source#"$HOME"/}
  target=${target//:/_}
  if [[ -d $source ]]; then
    mkdir -p -- "$target"
  elif [[ $target -ot $source ]]; then
    cp -p -- "$source" "$target"
  fi
done

यह स्क्रिप्ट छोटे संशोधनों के साथ zsh के तहत काम करती है: इसके shopt -s dotglob globstarद्वारा setopt dot_globऔर उसके [[ $target -ot $source ]]द्वारा प्रतिस्थापित [[ ! -e $target || $target -ot $source ]]


यहाँ एक zsh दो-लाइनर है (तीन यदि आप ऑटोलैड की गिनती करते हैं)। यह छोटा है, लेकिन काफी उन्नत है और बहुत पठनीय नहीं है।

autoload zargs zmv
zargs -- ~/mail/**/*(/e\''REPLY=/media/usb99/${${REPLY#$HOME/}//:/_}'\') -- mkdir -p --
zmv -C -Q -o -pu '~/mail/(**/)(*)(.)' '/media/usb99/mail/${1//:/_}${2//:/_}'
  • zargsलाइन के बराबर है mkdir -p ~/mail/**/*(…)सिवाय इसके कि यह बाहर बम नहीं होगा यदि निर्देशिका नाम की Cumulated लंबाई बहुत अधिक कर रहे हैं। यह पंक्ति आवश्यक के रूप में लक्ष्य निर्देशिका बनाती है।
  • ~/mail/**/*(/)के तहत सभी निर्देशिकाओं का विस्तार करता है ~/mail(केवल (/)अंत में होने वाली निर्देशिकाएं )।
  • (/e\''…'\')केवल निर्देशिकाओं का चयन करता है और प्रत्येक फ़ाइल नाम को बदलने के लिए '...' के भीतर कोड को निष्पादित करता है, जिसे REPLYचर में संग्रहीत किया जाता है।
  • ${${REPLY#$HOME/}//:/_}स्रोत निर्देशिका के साथ उपसर्ग को हटाता है और में बदलता :है _
  • zmv -C प्रत्येक फ़ाइल को उसके पहले ऑपरेंड (एक zsh पैटर्न) से मेल करते हुए फ़ाइल नाम को उसके दूसरे ऑपरेंड का विस्तार करके प्राप्त किया।
  • -o -puउपयोगिता को पारित -puकरने के लिए कहते हैं cp, ताकि अनुमति को संरक्षित करने के लिए और केवल अद्यतन फ़ाइलों की प्रतिलिपि बनाएँ। (हम अपडेट चेक करने के लिए zsh को बता सकते हैं; यह थोड़ा तेज़ होगा लेकिन और भी अधिक गूढ़ होगा।)
  • (.)केवल नियमित फ़ाइलों का चयन करता है। -Qयह कहता है कि इसे एक ग्लोब क्वालिफायर के रूप में देखा जाना चाहिए, न कि .इसके चारों ओर कोष्ठक के रूप में ।
  • $1और $2प्रतिस्थापन पाठ में कोष्ठक अभिव्यक्तियों से मेल खाता है (**/)और *। ( **अपने विशेष अर्थ को शून्य या अधिक उप-स्तर के स्तर के रूप में खो देता है यदि यह कोष्ठक में है, जब तक कि कोष्ठक बिल्कुल समाहित न हों **/।)

मैंने शुरू में पैक्स का उपयोग करने के लिए सोचा था , जो एक संग्रह उपकरण है (यहां पास-थ्रू मोड में उपयोग किए जाने का इरादा है) जिसमें एक फ़ाइल का नाम बदलने की सुविधा (इसका -sविकल्प) है। हालाँकि, -sऔर -uविकल्प एक साथ काम नहीं करते हैं ( पैक्स की पॉसिक्स परिभाषा शाब्दिक रूप से कहती है कि -uडेस्टिनेशन ट्री में एक ही नाम की एक फाइल की जांच करनी चाहिए, बजाय इसके कि फ़ाइल नाम बदल दिया गया है -s; उबंटू में पैक्स का कार्यान्वयन वस्तुतः के बजाय विशेष रूप से कल्पना का अनुसरण करता है ; उपयोगी)। यह अभी भी इसका इस्तेमाल का नाम बदला हार्ड लिंक बनाने के लिए बनाने के लिए संभव है, और उसके बाद हार्ड लिंक (के साथ कॉपी rsync -auया pax -rw -pp -u) अन्य मीडिया के लिए, लेकिन यह यह की कीमत की तुलना में अधिक परेशानी महसूस करता है।

cd ~/mail
mkdir -p /media/usb99/mail
pax -rw -l -pp -s '!:!_!g' . ../mail.colonless
rsync -au ../mail.colonless/ /media/usb99/mail/

मैं पैक्स का उपयोग करने की कोशिश करने जा रहा हूं। हो सकता है कि आप ubuntu पर आवश्यक पैकेज को निर्दिष्ट करके अपने उत्तर को बेहतर बना सकें। यह सामान्य स्थापना का हिस्सा नहीं लगता है।
गिलोय कोटे

सिर्फ एक पैकेज जोड़कर जिसे पैक्स कहते हैं, यह काम करता है।
गिलौम कोटे

यह कुछ भी आउटपुट नहीं करता है, मैं यह देखने के लिए -v विकल्प जोड़ने की कोशिश करता हूं कि क्या चल रहा है। यह हर समय हर चीज की नकल करता नजर आता है। Rsync का बिंदु वृद्धिशील होना है, जिसने मुझे बहुत समय बचाया है जब मेरे पास बहुत सारी फ़ाइलों के बीच में कुछ संशोधित फ़ाइल है।
गिलियूम कोटे

यह मेरे द्वारा बताए गए मार्ग के तहत एक 'घर' निर्देशिका बना रहा है। स्क्रिप्ट में निर्देशिका बदलने से बचने की सिफारिश की गई है, क्या उन सभी निर्देशिकाओं के निर्माण से बचने की एक और संभावना है?
गिलोय कोटे

पाँच मिनट लगे एक दूसरे पास पर जहाँ सब कुछ समान था। rsync को कुछ सेकंड ही लगे होंगे। क्या कोई विकल्प है जिसे इसे वृद्धिशील बनाने के लिए निर्दिष्ट करने की आवश्यकता है?
गुइल्यूम कोटे

-1

मैं अपने USB मेमोरी स्टिक और मोबाइल USB डिस्क के साथ क्या करता हूं, उन्हें 2 विभाजनों के साथ विभाजित कर रहा है: एक FAT32 एक और एक ext4। पहला मैं गैर-लिनक्स उपयोगकर्ताओं के साथ डेटा का आदान-प्रदान करने के लिए उपयोग कर सकता हूं, दूसरा मेरे उबंटू सिस्टम के साथ व्यक्तिगत उपयोग के लिए (और शायद अन्य लिनक्स उपयोगकर्ताओं के साथ आदान-प्रदान के लिए)। एक ext4 विभाजन पर, आपको ":" समस्या नहीं होगी।


मैं अपने बैकअप को किसी भी तरह से पठनीय होना चाहूंगा, अगर मुझे विंडोज़ कंप्यूटर पर कोई जानकारी चाहिए। यदि नहीं, तो मैंने यूनिक्स फाइल सिस्टम में usb कुंजी को रिफॉर्मेट किया होगा। इसलिए मैं प्रतिस्थापन के बारे में पूछ रहा हूं।
गिलौम कोटे

खैर, यह है अगर आप कुछ उपकरण या फाइल सिस्टम ड्राइवर इंस्टॉल विंडोज पर कम से कम ext2 / ext3 को पढ़ने के लिए संभव। क्या आप इसे हर विंडोज सिस्टम पर, या केवल अपने स्वयं के सिस्टम पर (जहां आप आवश्यक उपकरण स्थापित कर सकते हैं) को पढ़ने में सक्षम होना चाहते हैं?
JanC

BTW: सिद्धांत रूप में इसे NTFS सिस्टम पर भी स्टोर करना संभव होना चाहिए, लेकिन अधिकांश विंडोज़ एप्लिकेशन (Microsoft से अधिकांश सहित) NTFS का सही समर्थन नहीं करते ...: P
JanC

यह सबसे खराब केस रिकवरी बैकअप है, इसलिए मैं इस मामले के लिए तैयार रहना चाहता हूं जब मुझे कुछ जल्दी की जरूरत होती है मुझे कंप्यूटर पर कुछ भी इंस्टॉल करने का अधिकार नहीं है।
गिलौम कोटे

-2

आप tarएक संग्रह बनाने के लिए उपयोग कर सकते हैं । इस तरह आपको नाम बदलने की ज़रूरत नहीं है और आप जो भी फाइल सिस्टम चाहते हैं, उसे सहेज सकते हैं।


मैं ज़िप फ़ाइल या tgz के साथ भी ऐसा कर सकता था, लेकिन यह उस फ़ाइल को फिर से लिखने जा रहा है जो हर बार नहीं बदली है। चूंकि मीडिया सीमित संख्या में लिखता है और मुझे कई गिब डेटा मिले, इसलिए मैं पूरी बात को फिर से लिखने से बचना चाहूंगा क्योंकि एक नई 1kb फाइल जोड़ी गई थी।
गिलौम कोटे

एक हालिया फ्लैश मेमोरी पर फिर से लिखना लाखों तक या कम से कम सैकड़ों हजारों की संख्या में "सीमित" हैं। मुझे संदेह है कि आप कई बैकअप बनाने की योजना बना रहे हैं। ;)
जेएनसी

2
-1 -azv एक आर्काइव नहीं बनाता है, यह एक आर्काइव मोड कॉपी करता है जिसका अर्थ है कि यह फ़ाइल विशेषताओं को बनाए रखता है
João Pinto

sry, वास्तव में सोचा था कि rsync ऐसा कर सकता है, टार में बदल सकता है, लेकिन मुझे नहीं पता कि क्या टार वृद्धिशील बैकअप कर सकता है। हालाँकि JanC सही है और पुनर्लेखन को समस्या नहीं होनी चाहिए।
डेविड

फिर से लिखने के बारे में जेएनसी टिप्पणियों के बारे में, यह सिर्फ तथ्य नहीं है कि एक सीमा है (पिछली बार जब मैं जांच करता हूं, तो यह एक हजार के करीब था कि एक लाख), लेकिन यह भी तथ्य यह है कि मुझे कुछ के लिए कई घंटे इंतजार करना पसंद नहीं है एक मिनट से कम होना चाहिए।
गिलौम कोटे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.