मैं निर्देशिका ए से निर्देशिका बी तक की फाइलों के एक सेट को कैविएट के साथ कॉपी करना चाहूंगा कि यदि निर्देशिका ए में एक फाइल निर्देशिका बी में एक फ़ाइल के समान है, तो उस फाइल को कॉपी नहीं किया जाना चाहिए (और इस प्रकार इसका संशोधन समय नहीं होना चाहिए। अद्यतन)। क्या ऐसा करने का कोई तरीका है, मौजूदा टूल्स के साथ, बिना अपनी स्क्रिप्ट लिखने के लिए?
मेरे उपयोग-मामले पर थोड़ा विस्तार करने के लिए: मैं .c
एक अस्थायी निर्देशिका में फ़ाइलों का एक गुच्छा ऑटोजेनरेट कर रहा हूं (एक विधि द्वारा जो बिना शर्त उन सभी को उत्पन्न करना है), और जब मैं उन्हें फिर से उत्पन्न करता हूं, तो मैं केवल कॉपी करना चाहूंगा जो वास्तविक स्रोत निर्देशिका में बदल गए हैं, अपरिवर्तित लोगों को अछूता छोड़ रहे हैं (उनके पुराने निर्माण के समय के साथ) ताकि make
उन्हें पता चले कि इसे उन्हें फिर से स्थापित करने की आवश्यकता नहीं है। (सभी उत्पन्न फाइलें फाइलें नहीं हैं .c
, हालांकि, इसलिए मुझे पाठ तुलनाओं के बजाय द्विआधारी तुलना करने की आवश्यकता है।)
(नोट के रूप में: यह https://stackoverflow.com/questions/8981552/speeding-up-file-comparions-with-cmp-on-cygwin/8981562#8981762 पर मेरे द्वारा पूछे गए सवाल से आगे बढ़ा , जहाँ मैं कोशिश कर रहा था। इस ऑपरेशन को करने के लिए मैं जिस स्क्रिप्ट फ़ाइल का उपयोग कर रहा था, उसे गति देने के लिए, लेकिन मेरे साथ ऐसा होता है कि मुझे वास्तव में पूछना चाहिए कि क्या ऐसा करने का कोई बेहतर तरीका है कि मैं अपनी स्क्रिप्ट लिखूं - विशेष रूप से शेल में ऐसा करने के किसी भी सरल तरीके से। स्क्रिप्ट cmp
फाइलों के हर जोड़े पर कुछ-कुछ आह्वान करेगी , और उन सभी प्रक्रियाओं को शुरू करने में बहुत लंबा समय लगता है।)
rsync -avnc
या लंबा रास्ता तय करें rsync --archive --verbose --dry-run --checksum
।
diff -qr dirA dirB
देखने के लिए उपयोग कर सकते हैं कि कौन सी फाइलें अद्वितीय हैंdirA
औरdirB
, पश्चाताप से।