लिनक्स में एक फ़ोल्डर को कैसे mtime को बनाए रखना है?


12

मैं सेंटोस 5.5 का उपयोग कर रहा हूं और बड़ी मात्रा में फ़ोल्डरों को एक वॉल्यूम में ले जाना चाहूंगा , उन्हें बरकरार रखूंगा mtime

सबसे अच्छा समाधान मैं इस तरह मिल सकता है:

cp -p -r source/data target/
rm -rf source/data

एनएफएस शेयर पर 1TB से अधिक डेटा के साथ, नकल हमेशा के लिए हो जाती है। मैं कॉपी नहीं करना चाहता। मुझे तात्कालिक कदम चाहिए।

जब मैं किसी फ़ोल्डर का उपयोग कर ले जाता हूं mv source/data target/, तो mtimeफ़ोल्डर (फ़ाइलों का नहीं) वर्तमान समय के लिए सेट हो जाता है। ऐसा इसलिए है क्योंकि मैं जिस फ़ोल्डर की सामग्री को स्थानांतरित कर रहा हूं वह इस ऑपरेशन द्वारा संशोधित हो जाता है ( ..प्रविष्टि एक अलग इनोड की ओर इशारा करती है)।

मैं निम्नलिखित शेल स्क्रिप्ट के साथ आया था जिसे मैंने कहा था mv_preserve_mtime.sh:

#!/bin/bash
# Moves source folder to target folder. 
# You are responsible for making sure the target does not exist, otherwise this blows up
export timestamp=`stat -c %y $1`
mv "$1" "$2"
touch --date="${timestamp}" $2

खैर, यह भी काम नहीं किया। फ़ोल्डर mtimeको पुनर्स्थापित किया जाता है, लेकिन मेरे द्वारा चलाए जाने वाले फ़ोल्डर के भीतर सभी फ़ोल्डर (केवल 1 स्तर गहरा) उन mtimeकारणों के लिए अपना रीसेट प्राप्त करते हैं जिन्हें मैं नहीं समझता हूं।

क्या किसी के पास उचित, कुशल और सही समाधान है?


मुझे आश्चर्य है कि आपके प्रयास से touchकाम नहीं चला। क्या यह mvचरण या touchचरण है जो उपनिर्देशिकाओं के माइम को बदलता है? NFS सर्वर पर OS क्या है, और यदि आप जानते हैं कि फाइलसिस्टम क्या है?
गाइल्स का SO- दुष्ट होना बंद करें '

@ गिल्स: मुझे नहीं पता कि ऐसा क्यों हो रहा है। यह वह mvकदम है जो परेशानी का कारण बनता है। एनएफएस सर्वर वास्तव में एक नेटएप स्टोरेज है, मैं इसके इंटर्न के बारे में लगभग कुछ भी नहीं जानता हूं।
रोमन ज़ेनका

1
धन्यवाद। मुझे संदेह है कि यह एक नेटएप विषमता है। अन्यथा touchकाम करना चाहिए था। वैसे एक और पोर्टेबल तरीका होगा touch -r "$1" reference.tmp; mv -- "$1" "$2"; touch -r reference.tmp -- "$2"; rm reference.tmp
गिल्स एसओ- बुराई को रोकना '

@ गिल्स: बहुत दिलचस्प, एहसास statनहीं था कि पोर्टेबल नहीं था।
रोमन ज़ेनका

जवाबों:


15

POSIX mv, atime / mIME परिरक्षण के लिए पूछने के लिए कोई विकल्प प्रदान नहीं करता है, लेकिन जैसा कि ऑपरेशन एक ही वॉल्यूम के लिए स्थानीय है, आप विकल्प cpका उपयोग करके नियमित फ़ाइलों के डेटा को कॉपी करने के बजाय हार्ड-लिंक का उपयोग करने के लिए कह सकते हैं -l:

cp -p -r -l source/date target/
rm -rf source/data

चूंकि केवल निर्देशिका और फ़ाइल संदर्भ वास्तव में कॉपी किए जाएंगे, इसलिए इसे बहुत तेज़ी से जाना चाहिए:

हार्ड-लिंक पर अधिक जानकारी के लिए, आप संबंधित विकिपीडिया पृष्ठ से परामर्श कर सकते हैं

जैसे कि उपनिर्देशिका माइम को आपके वर्तमान समाधान के साथ रीसेट किया जा रहा है, यह इसलिए है क्योंकि आप केवल मूल निर्देशिका माइम को प्राप्त करते हैं और पुनर्स्थापित करते हैं: स्पर्श एक पुनरावर्ती कमांड नहीं है।


माइम इससे अधिक जटिल है। केवल मूल निर्देशिका और इसके अंतर्गत आने वाली निर्देशिकाओं में ही परिवर्तन हुआ है। अन्य सभी निर्देशिकाएं समान हैं। हर एक निर्देशिका को या तो बदलने की उम्मीद है, या केवल माता-पिता की।
रोमन ज़ेनका

1
वास्तव में, यह समझ में आता है: 1) मूल निर्देशिका में अच्छा माइम होता है क्योंकि यह स्पष्ट रूप से स्पर्श द्वारा निर्धारित किया गया था, 2) निर्देशिका प्रविष्टियां जहां मूल निर्देशिका के साथ पुन: निर्मित की जाती हैं, लेकिन उनका माइम मैन्युअल रूप से पुनर्स्थापित नहीं किया गया है (यूनिक्स निर्देशिका संरचना और इनोड प्रारूप) 3) बाकी पेड़ की संरचना वास्तव में नहीं बदली गई थी, क्योंकि हम एक ही वॉल्यूम पर बने हुए थे: इसीलिए mvकोई "पुनरावर्ती" विकल्प नहीं था, उपनिर्देशिकाओं में उतरना केवल तभी होता है यदि वास्तविक प्रतिलिपि (उदाहरण के लिए अलग-अलग वॉल्यूम) की आवश्यकता होती है।
यूरेका

@ यूरेका: अच्छा स्पष्टीकरण, लेकिन ऐसा क्यों किया जाता है? अगर मैं लागू करने के लिए था mvएक निर्देशिका पर data, मैं बस बदल जाएगा ..में dataकी सामग्री और संशोधित sourceऔर targetस्थानांतरित किए गए आइटम ठीक से सूचीबद्ध करने के लिए निर्देशिका। किसी अन्य निर्देशिका को छूने की आवश्यकता नहीं होगी।
रोमन ज़ेनका

1
@ रोमन ज़ेंका कुछ खोज के बाद, यह व्यवहार यूनियनों और फाइल सिस्टम के बीच बहुत कम निर्दिष्ट renameकिया गया है और कर्नेल और प्रयुक्त फाइलसिस्टम (ओं) द्वारा एनआईएफएस के कई अंतर्निहित कार्यान्वयन पर निर्भर करता है , समस्या में अपना हिस्सा जोड़ रहा है। इस तरह की विसंगतियों को संदर्भित करने वाले कुछ पॉइंटर हैं: पैचवर्क. ozlabs.org/patch/25833 bugs.opensolaris.org/bugdatabase/…
यूरेका

@ यूरेका: मुझे इस बात पर विश्वास करना बेहद मुश्किल है कि मैं जिस चीज को इतना बुनियादी समझूंगा, वह इतनी गड़बड़ हो सकती है। यह लगभग 2011 है। उन संसाधनों के लिए धन्यवाद!
रोमन ज़ेनका

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