MacOS में cp -r -l (पुनरावर्ती कॉपी हार्ड लिंक को संरक्षित करना)


12

मैं एक डायरेक्टरी ट्री को कॉपी करने की कोशिश कर रहा हूं ताकि फाइल में हार्डलिंक को संरक्षित किया जा सके। ग्नू cp का प्रयोग, यह -l ध्वज के साथ काम करेगा। cp तब निर्देशिका संरचना को फिर से बनाएगा, लेकिन प्रत्येक फ़ाइल की सामग्री को कॉपी करने की आवश्यकता नहीं होगी।

यह एक बैकअप के लिए प्रारंभिक है, पहले मैं पिछले बैकअप की एक सस्ती (हार्डलिंक) प्रतिलिपि बनाना चाहता हूं और फिर इस प्रतिलिपि पर स्रोत निर्देशिका को rsync करता हूं। मोटे तौर पर:

 cp -r -l yesterdays_backup todays_backup
 rsync -a source_dir todays_backup

दुर्भाग्य से, OSX की cp -l ध्वज का समर्थन नहीं करती है, जहाँ तक मैं बता सकता हूँ, cpio पुनरावर्ती प्रतिलिपि का समर्थन नहीं करता है। अन्य विकल्प पैक्स है, लेकिन इससे पूरी निर्देशिका संरचना कॉपी हो जाती है:

 pax -rw backups/yesterdays_backup backups/todays_backup

रूपांतरण:

 yesterdays_backup
 |
  \source_dir (...)

सेवा:

 todays_backup
 |
  \backups
          \yesterdays_backup
                            \source_dir(...)

ऐसा करने का एक आसान / स्पष्ट तरीका होना चाहिए, लेकिन मैं वर्तमान में स्टम्प्ड हूं ... cpio और pax के लिए कोई विकल्प? मैं gnu cp स्थापित करने से बचना चाहूंगा।

मैं टिमेमाचिन के बारे में जानता हूं, लेकिन यह ठीक से गुप्त निर्देशिकाओं को उचित रूप से वापस नहीं करेगा।

mac  backup  rsync  cp 

cpio के साथ खोज का उपयोग करते हुए यहाँ वर्णित के रूप में पुनरावर्ती cpio की कमी के आसपास मिलता है: ( mikerubel.org/ कंप्यूटर्स /rsync_snapshots/#Incremental ) लेकिन बहुत सुंदर नहीं लगता ...

जवाबों:


16

MacPorts से cp को स्थापित करना काफी आसान है, हालाँकि, यदि आप नहीं चाहते हैं, या एक पोर्टेबल स्क्रिप्ट बनाना चाहते हैं, तो आपके पास तीन विकल्प हैं:

rsync

rsync --archive --link-dest=../yesterdays_backup backups/yesterdays_backup\
   backups/todays_backup

केन्द्रीय लोक सूचना अधिकारी

mkdir backups/todays_backup
cd backups/yesterdays_backup
find . -print | cpio -p -al ../todays_backup

शांति

mkdir backups/todays_backup
cd backups/yesterdays_backup
pax -rwl . ../todays_backup

क्या होगा यदि स्रोत और गंतव्य विभिन्न डिस्क में हैं? क्या rsync अभी भी गंतव्य में बनाई गई प्रतिलिपि में स्रोत से हार्ड लिंक को संरक्षित करेगा?
lpacheco

7

मैकपोर्टcoreutils से पैकेज को स्थापित करना आसान है जिसमें जीएनयू कमांड का नाम शामिल है ।cpgcp

लेकिन इससे भी बेहतर, rsync के नए संस्करण, OS X 10.5 में कम से कम एक सहित - thelink- भाग्य विकल्प का समर्थन करते हैं, जिसे प्रारंभिक cp -al की आवश्यकता को समाप्त करना चाहिए। देखें यहाँ । विस्तारित विशेषताओं, एसीएल आदि को कॉपी करने के लिए -ई विकल्प का उपयोग करना अच्छा है।


1

यद्यपि cpioसीधे पुनरावर्ती प्रतिलिपि बनाने का समर्थन नहीं करता है, आप उन फ़ाइलों की सटीक सूची को फ़ीड कर सकते हैं जिन्हें आप इसके मानक इनपुट में कॉपी करना चाहते हैं, और findपाइप में उपयोग करके पुनरावर्ती प्रतिलिपि के प्रभाव को प्राप्त कर सकते हैं cpio। यह सीधे जीएनयू tarको विकल्पों के साथ उपयोग करने के लिए अनुरूप है -T -(जिसका अर्थ है मानक इनपुट से बैकअप के लिए फ़ाइलों की सूची पढ़ें)।


1

मेरा मानना ​​है कि आप जो चाहते हैं वह भी हासिल किया जा सकता है ditto yesterdays_backup todays_backup। डिफ़ॉल्ट रूप से, dittoएक पुनरावर्ती प्रतिलिपि बनाता है जो हार्ड लिंक, एसीएल और विस्तारित विशेषताओं को संरक्षित करता है।


समस्या यह है कि जब उद्देश्य निर्देशिका दायरे में हार्ड लिंक बनाने के लिए है तो कॉपी किसी भी अधिक सस्ता नहीं है। जब वे मौजूद हों, तो डिट्टो उन्हें संरक्षित कर सकते हैं, लेकिन इसे डुप्लिकेट बनाने के बजाय लिंक करने के लिए नहीं कहा जा सकता है।
फ्लोरेंज केली

मुझे नहीं लगता कि डिटो को निर्देशिका हार्ड लिंक को संरक्षित करने के लिए भी कहा जा सकता है। मैन पेज का कहना है कि यह केवल हार्ड लिंक फाइल करता है
क्रिस एफ कैरोल

0

पॉल के जवाब के लिए +1। डिट्टो एक विकल्प होगा, लेकिन यदि केवल खोज के साथ संयोजन में उपयोग किया जाता है - यह हार्ड लिंक को संरक्षित करता है, लेकिन केवल निर्देशिका के अंदर।

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