फ़ाइल की बनाई / संशोधित तिथियों को कैसे बचाएं और पुनर्स्थापित करें?


4

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

पुराने सर्वर पर फ़ाइलों की तारीखों का बैकअप कैसे लें और उन्हें नए पर पुनर्स्थापित करें (सभी फ़ाइलों को फिर से स्थानांतरित किए बिना)?


यदि आपके पास cp(या scp) का संस्करण -pया --preserveविकल्प है, तो आपको इसका उपयोग करना चाहिए! अगली बार इसे न भूलें ...
gniourf_gniourf

मैंने इस्तेमाल कियाfind ... | cpio ... | mcrypt ... | pv ... | nc -lp 1
Vi।

जवाबों:


7

फ़ाइलों और निर्देशिकाओं के सभी {c, n, a} समय को बचाने और पुनर्स्थापित करने के लिए यहां स्क्रिप्ट हैं:

सहेजें:

find / -mount -print0 | perl -ne 'INIT{ $/ = "\0"; use File::stat;} chomp; my $s = stat($_); next unless $s; print $s->ctime . "/" . $s->mtime . "/" . $s->atime ."/$_\0"; ' > dates.dat

पुनर्स्थापित करें:

cat dates.dat |  perl -ne 'INIT{ $/ = "\0";} chomp; m!^([0-9]+)/([0-9]+)/([0-9]+)/(.*)!s or next; my ($ct, $mt, $at, $f) = ($1, $2, $3, $4); utime $at, $mt, $f;'

हालांकि यह समय (इनओट-चेंज टाइम) सेट नहीं करता है ।


2

आप statस्रोत पर दिनांक प्राप्त करने और touchलक्ष्य पर उन्हें संशोधित करने के लिए उपयोग कर सकते हैं ।


यह फ़ाइलों का एक समूह (विशेष नाम वाले लोगों सहित) के लिए स्वचालित रूप से कैसे करें? मैं प्रत्येक फ़ाइल को मैन्युअल रूप से स्टेट करना और छूना नहीं चाहता।
वि।

आपको एक स्क्रिप्ट का उपयोग करना होगा। मैं कुछ समय के स्टेटमेंट में पाई, कुछ फाइल के साथ स्टेट के आउटपुट को पार्स करने और सोर्स से टच के साथ लगाने के साथ कुछ करूँगा। वास्तविक कार्यान्वयन इसमें शामिल विशेष फ़ाइल संरचना पर निर्भर करेगा।
21

ठीक है, स्क्रिप्ट को स्वयं लागू करना (मुझे लगा कि इसके लिए एक उपकरण होना चाहिए या किसी के पास पहले से ही ऐसी स्क्रिप्ट है)।
वि।

2

Https://github.com/robertknight/mandrawer/blob/master/save-file-attrs.py पर इसे करने के लिए मेरे पास एक पायथन स्क्रिप्ट है

मूल सर्वर चलाने पर:

save-file-attrs.py save scp .saved-file-attrs <user>@<dest-server>:<path>

गंतव्य सर्वर रन पर:

cd <path> save-file-attrs.py restore

यह फ़ाइल विशेषताओं को पुनर्स्थापित करेगा।


1

यदि फ़ाइल नाम बहुत अजीब नहीं हैं, और मुझे केवल माइम को पुनर्स्थापित करने की आवश्यकता है, तो मैं इस त्वरित और गंदे समाधान का उपयोग करता हूं:

find . -type f -exec stat -c 'touch --no-create -d "%y" "%n"' {} \;

यह स्रोत पर एक स्क्रिप्ट बनाता है, और उस स्क्रिप्ट को गंतव्य टाइमस्टैम्प को पुनर्स्थापित करने के लिए गंतव्य पर चलाया जा सकता है।


शायद एक तेज़ विकल्प है find . -type f -printf 'touch --no-create -d "%t" "%p"\n'क्योंकि यह कांटा नहीं है। लेकिन इसे अभी भी कुछ सुधार (स्थिर समय प्रारूप) की आवश्यकता है
डैनियल एल्डर

मैं उपयोग कर रहा हूं find . -type f -exec stat -c 'touch --no-create -d @%Y "%n"' {} \; >restore-timestamps(स्थानीय तारीख प्रतिनिधित्व के बजाय टाइमस्टैम्प)।
rdesgroppes
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.