सवाल रुपये: केवल टाइमस्टैम्प पर प्रतिलिपि बनाएँ


वर्तमान में मेरे पास दो निर्देशिकाएं ए / और बी / हैं जो टाइमस्टैम्प के अपवाद के साथ हर सम्मान में समान हैं। इसलिए यदि मैं आदेश चलाता हूं:

rsync --dry-run -crvv A/ B/

तो सभी फाइलों को "अपतटीय" चिह्नित किया जाता है, जबकि आदेश:

rsync --dry-run -rvv A/ B/

दिखाता है कि सभी फाइलों को ए / से बी / पर कॉपी किया जाना है।

मेरा सवाल यह है: यह देखते हुए कि मुझे पता है कि फाइलें समान हैं (सामग्री के संबंध में), फिर फाइलों के टाइमस्टैम्प के समान होने के लिए बी / में फ़ाइलों के लिए टाइमस्टैम्प सेट करने के लिए कोई तरीका है (rsync या अन्यथा के माध्यम से) ए /, ए / से बी / से सभी फाइलों पर प्रतिलिपि किए बिना?

धन्यवाद


36
2017-12-28 16:35


मूल


यदि आप जानते हैं कि फाइलें समान हैं, तो आपको अपनी तिथि / समय टिकट प्राप्त करने के लिए उन पर प्रतिलिपि बनाने के लिए क्यों नहीं जाना चाहिए? - Tim
@ टिम: शायद एक है बहुत आंकड़े का। - Richard


जवाब:


का उपयोग करते हुए -t (टाइमस्टैम्प को संरक्षित करें) और --size-only केवल आकार पर फ़ाइलों की तुलना करेगा। यदि आकार मिलान करता है, तो rsync फ़ाइल की प्रतिलिपि नहीं करेगा लेकिन तब से -t निर्दिष्ट है, यह गंतव्य फ़ाइल पर टाइमस्टैम्प को बिना दोबारा अपडेट किए अपडेट करेगा।

उपयोग न करें सुनिश्चित करें -u (अपडेट करें) क्योंकि यह उन फ़ाइलों को छोड़ देगा जो पहले से मौजूद हैं और पूरी तरह से टाइमस्टैम्प को अपडेट करना छोड़ दें।

मुझे मूल रूप से फ़ाइलों की एक गुच्छा को एक नए ड्राइव में कॉपी करने के लिए rsync का उपयोग नहीं करने की समस्या थी, और इसलिए टाइमस्टैम्प को वर्तमान समय में अपडेट किया गया था। मैंने सभ्य समय में सही ढंग से सबकुछ सिंक करने के लिए नीचे दिए गए आदेश का उपयोग किया:

rsync -vrt --size-only /src /dest

64
2017-11-21 13:43



मैं भी जोड़ने का सुझाव देते हैं --existing नई फाइलों की आकस्मिक प्रतियों को रोकने के लिए। - leden
झंडा --archive (या -a) शामिल हैं -r, -t और अधिक :) - Dor


आकार का उपयोग करने से केवल आकार के मिलान होने पर फ़ाइल टाइमस्टैम्प (और इसलिए फ़ाइल सामग्री) की तुलना करने के लिए rsync को छोड़ना होगा। इसे समय-समय पर संयोजित करने से टाइम पेड़ को लक्षित पेड़ में क्लोन कर दिया जाएगा।


6
2018-03-30 13:58





मुझे लगता है कि rsync इसे बनाने का सही टूल है, लेकिन यदि आप कुछ स्क्रिप्ट ऐसा करने से पहले ऐसा करना चाहते हैं तो यह अच्छी शुरुआत दे सकता है।

आप टाइमस्टैम्प (acces times) के साथ फ़ाइल सूची प्राप्त कर सकते हैं:

find . -printf '"%p" %a\n' -type f > /tmp/times

और इससे उपयुक्त समय अपडेट कमांड प्राप्त करें:

 while read line; do echo touch -a -d \"${line#* }\" ${line%% *}; done < /tmp/times

यह एक पूर्ण लिपि नहीं है लेकिन एक अच्छी शुरुआत जगह है :)


3
2017-12-28 17:05



धन्यवाद। मुझे लगता है कि मैं शायद इस पल के लिए रुपये के साथ रहूंगा, लेकिन मैं निश्चित रूप से वेब पर जाउंगा और अपनी लिपि के विभिन्न घटकों को सीखूंगा, क्योंकि यह भविष्य में उपयोगी हो सकता है। - artella
यह वास्तव में मेरा समाधान लग रहा था! मैं अपने संगीत पुस्तकालय में कुछ मेटा डेटा जोड़ते समय समय को संरक्षित करना चाहता हूं। हालांकि, स्पष्ट रूप से यह फ़ाइल नामों में रिक्त स्थान को संभाल नहीं सकता है): - Burcardo


उपयोग स्रोत (उदाहरण के लिए /path/to/source) निर्देशिका को स्पर्श कमांड के संदर्भ के रूप में। केवल cd आपके लक्ष्य निर्देशिका और करो

find -type f -exec touch -r /path/to/source/{} {} \;

आप rsync (अभी तक) के साथ उप-सेकंड टाइमस्टैम्प की प्रतिलिपि नहीं बना सकते हैं।

यह निर्देशिकाओं और छद्म फ़ाइलों के लिए भी काम करता है (बस हटाएं या बदलें -type f)


2
2017-09-29 14:36



यह मेरे लिए उपयोगी था क्योंकि मुझे प्रतिलिपि बनाने के लिए एनीम की आवश्यकता थी। मैंने देखा कि यह सीटाई की प्रतिलिपि नहीं करता है, जो मेरे मामले में ठीक था। - snapfractalpop
बस 'स्पर्श' के मैनपेज को पढ़ें। आप इस कमांड के साथ दोनों एनीम और एमआईटी सेट कर सकते हैं। - knorke
हाँ, मुझे पता है कि आप इसका उपयोग कर सकते हैं touch -ar लेकिन वह अभी भी सीटाई नहीं बदलता है। मुझे लगता है कि शायद ही कभी वांछित है। - snapfractalpop
आह, अब मुझे समस्या दिखाई दे रही है। धन्यवाद। हां, सीटाई बदलना मुश्किल है और मुझे नहीं पता क्यों। - knorke


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

लेकिन यह संभवतया आपको सभी फाइलों की प्रतिलिपि बनाने की कोशिश करने के लिए rsync को देने की अपेक्षा अधिक लंबा ले जाएगा। बहुत कम डेटा वास्तव में स्थानांतरित किया जाएगा (फाइलें वास्तव में समान हैं तो केवल ब्लॉक हैश)। लेकिन प्रत्येक फाइल की पूरी सामग्री को कम से कम प्रत्येक तरफ पढ़ना होगा। तो आप डिस्क बैंडविड्थ या आईओपीएस द्वारा सीमित हैं, इसमें कुछ समय लग सकता है। लेकिन अभी भी ऐसा करने के लिए लिपि लिखने और परीक्षण करने से कम समय लगता है।


1
2017-12-28 16:53



धन्यवाद, मैं rsync की इस विशेषता से अनजान था (यह भी विकिपीडिया में चर्चा की गई है)। - artella


Rsync मैनुअल: man rsync एक सूची है -t तथा -N स्विच, वे fiddling के लायक हो सकता है।


0
2017-12-28 16:57





मेरे जैसे लोगों के लिए जो इरादा रखते हैं फ़ाइलों को संशोधित करें और मूल टाइमस्टैम्प को बनाए रखना चाहते हैं (उदाहरण के लिए आप अपनी संगीत पुस्तकालय के मेटा टैग अपडेट करें)।

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

  1. पुराने टाइमस्टैम्प को संरक्षित करें। यह वर्तमान निर्देशिका से संचालित होता है, सभी छिपी हुई फाइलों को छोड़ देता है, और इसे अस्थायी फ़ाइल में सहेजता है /tmp/files। आप हमेशा पैरामीटर बदल सकते हैं, लेकिन बेहतर रहें -printf '"%t" "%p"\n' बाद में touch आदेश उस का उपयोग करता है।

    find . ! -iname ".*" -printf '"%t" "%p"\n' -type f > /tmp/files

  2. अपनी फाइलों को संशोधित करें जितना आप चाहें

  3. अब एक फाइल बनाएं जो आपको टाइमस्टैम्प को बहाल करने में मदद करे:

    while read line; do echo touch -a -d $line >> job.sh; done < /tmp/times

  4. और अंत में संशोधित फ़ाइलों की पुरानी तिथियां लागू करें

    sh job.sh

चेतावनी: नाम अंतरण, विशेष पात्रों वाली फ़ाइलों के लिए काम करता है, लेकिन उदाहरण के लिए कोई फाइल नहीं है $ इसमें साइन इन करें।


0
2017-07-22 08:19



अपने फ़ाइल नामों में बैकस्लाश के साथ (कुछ) समस्याओं से बचने के लिए, उपयोग करें read -r line। कुंआ, हमेशा उपयोग read साथ में -r। इसके अलावा, आप खोलने से बच सकते हैं job.shप्रत्येक फाइल के लिए। आदेश के अंत में केवल पुनर्निर्देशन डालें: while read -r path; do echo touch -a -d $path ; done < /tmp/times > job.sh - hagello
दूसरी चेतावनी: यह स्क्रिप्ट टाइमस्टैम्प निर्देशिका को स्थानांतरित नहीं करती है। (ठीक है, ओपी ने इसके लिए नहीं पूछा था।) - hagello


विंडोज़ पर केवल टाइमस्टैम्प की प्रतिलिपि बनाने का सबसे अच्छा तरीका:

किसी भी फ़ाइल के आखिरी बनाए गए / संशोधित / एक्सेस किए गए टाइम स्टैम्प को किसी अन्य पर कॉपी करने के लिए, आप इसका उपयोग कर सकते हैं:

स्पर्श / सी / एम / ए / आर SourceFile DestFile 

(टच का यह संस्करण Win32 कंसोल टूलबॉक्स का हिस्सा है http://www.stevemiller.net/apps/ )

रोबोकॉपी "SOURCE_DIRECTORY" "DESTINATION_DIRECTORY" / ई / कॉपी / डीसीओपीवाई: डीएटी / एक्सएफ  / आर: 10 / डब्ल्यू: 5 / वी / ईटीए


0
2018-02-08 10:54