मेरे पास एक निर्देशिका है जिसमें 400 से अधिक GiB डेटा है। मैं जांचना चाहता था कि सभी फाइलें त्रुटियों के बिना पढ़ी जा सकती हैं, इसलिए मैंने सोचा था कि tar
यह एक सरल तरीका है /dev/null
। लेकिन इसके बजाय मैं निम्नलिखित व्यवहार देखता हूं:
$ time tar cf /dev/null .
real 0m4.387s
user 0m3.462s
sys 0m0.185s
$ time tar cf - . > /dev/null
real 0m3.130s
user 0m3.091s
sys 0m0.035s
$ time tar cf - . | cat > /dev/null
^C
real 10m32.985s
user 0m1.942s
sys 0m33.764s
ऊपर की तीसरी कमान पहले से ही काफी लंबे समय तक चलने के बाद Ctrl+ द्वारा जबरन बंद कर दी गई थी C। इसके अलावा, जब पहले दो कमांड काम कर रहे थे, स्टोरेज डिवाइस की गतिविधि सूचक .
लगभग हमेशा बेकार थी। तीसरे आदेश के साथ सूचक लगातार जलाया जाता है, जिसका अर्थ है अत्यधिक व्यस्तता।
तो ऐसा लगता है कि, जब tar
यह पता लगाने में सक्षम है कि इसकी आउटपुट फाइल है /dev/null
, यानी जब /dev/null
फ़ाइल हैंडल को खोलने के लिए सीधे खोला जाता है जो tar
लिखता है, तो फ़ाइल बॉडी स्किप हो जाती है। ( v
करने के लिए विकल्प जोड़ना tar
निर्देशिका में सभी फ़ाइलों को tar
'लाल' प्रिंट करता है ।)
तो मुझे आश्चर्य है, ऐसा क्यों है? क्या यह किसी प्रकार का अनुकूलन है? यदि हाँ, तो tar
ऐसे विशेष मामले के लिए ऐसा संदिग्ध अनुकूलन क्यों करना चाहते हैं?
मैं लिनक्स 4.14.105 amd64 पर glibc 2.27 के साथ GNU टार 1.26 का उपयोग कर रहा हूं।
pv
: tar -cf - | pv >/dev/null
। यह समस्या को दरकिनार करता है और आपको एक प्रगति की जानकारी (विभिन्न pv
विकल्प) देता है
gtar -cf /dev/zero ...
आपको जो पसंद है उसे पाने के लिए उपयोग करें ।
find . -type f -exec shasum -a256 -b '{}' +
। न केवल यह वास्तव में सभी डेटा को पढ़ता है और चेक करता है , लेकिन यदि आप आउटपुट को स्टोर करते हैं, तो आप बाद में यह जांचने के लिए इसे चला सकते हैं कि फ़ाइलों की सामग्री नहीं बदली है।