mv
मेरे प्रश्न का उत्तर न देने के बाद गुम फाइलों से संबंधित प्रश्न। निम्न निर्देश कार्य निर्देशिका के भीतर चलाए गए थे जहाँ फ़ाइलें स्थित होती हैं, जिसके परिणामस्वरूप फ़ाइलें गुम हो जाती हैं।
चरण 1
मैं फ़ाइल नाम का एक क्रमबद्ध सरणी है $layers
के साथ बनाया layers=$(ls cropped* | sort -nk1.9)
:
IFS=$'\n';for file in $layers; do echo $file; done
cropped_1.png
cropped_2-a.png
cropped_2-b.png
cropped_2.png
cropped_3-a.png
cropped_3-b.png
cropped_3.png
cropped_4-a.png
cropped_4-b.png
cropped_4-c.png
cropped_4-d.png
cropped_4-e.png
cropped_4-f.png
cropped_4-g.png
cropped_4.png
cropped_5-a.png
cropped_5-b.png
cropped_5.png
--More--
चरण 2
मैंने प्रत्येक फ़ाइल नाम में _ के बाद सब कुछ बदलने के लिए निम्न लूप चलाया:
i=1;IFS=$'\n';for file in $layers; do echo ${file/#*_*/cropped_$((i++)).png}; done
cropped_1.png
cropped_2.png
cropped_3.png
cropped_4.png
cropped_5.png
cropped_6.png
cropped_7.png
cropped_8.png
cropped_9.png
cropped_10.png
cropped_11.png
cropped_12.png
cropped_13.png
cropped_14.png
cropped_15.png
cropped_16.png
cropped_17.png
--More--
चरण 3 - खतरे, रॉबिन्सन!
यह अब तक अच्छा लग रहा था। इसलिए मैं के साथ एक फ़ाइल का नाम बदलने की कोशिश की mv
निम्नलिखित पाश है, जो मैं कुछ में परिणाम होगा उम्मीद का उपयोग कर की तरह mv cropped_2-a.png cropped_2.png
है, तो mv cropped_2-b.png cropped_3.png
, और इतने पर:
i=1;IFS=$'\n';for file in $layers; do mv $file ${file/#*_*/cropped_$((i++)).png}; done
इसने पहली फ़ाइल के लिए एक त्रुटि दी।
mv: 'cropped_1.png' और 'cropped_1.png' एक ही फाइल हैं
मुझे लगा कि यह प्रत्येक फ़ाइल नाम के लिए यह त्रुटि देगा जहाँ mv SOURCE DEST
मिलान किया गया। इसके बजाय, यह केवल लूप में पहली फ़ाइल पर त्रुटि देता है।
अजीब बात यह है कि कई फाइलें अब गायब हैं। केवल शेष फाइलें इस प्रकार हैं:
ls cropped* | sort -nk1.9
cropped_1.png
cropped_141.png
cropped_142.png
cropped_143.png
cropped_144.png
cropped_145.png
cropped_146.png
cropped_147.png
cropped_148.png
cropped_149.png
cropped_150.png
cropped_151.png
cropped_152.png
cropped_153.png
cropped_154.png
cropped_155.png
सवाल
गुम हुई फाइलें कहां चली गईं?
इससे पहले कि मैं कुछ नामों के साथ कुछ डुप्लिकेट बनाता जैसे 140 फाइलें थीं, cropped_2-a.png
जिसके परिणामस्वरूप कुल 155 फाइलें थीं। यदि फाइलें 141-155 सफलतापूर्वक चली गईं, तो फाइलें 2-140 कहां हैं? वे अपेक्षित गंतव्य की ओर क्यों नहीं बढ़ रहे हैं; वर्तमान काम कर निर्देशिका?
टिप्पणियाँ
यदि मैं ऐसे नामों के साथ फाइल नहीं जोड़ता हूं cropped_2-a.png
, तो लूप प्रत्येक फ़ाइल के लिए त्रुटि संदेश प्रदर्शित करेगा और फाइलें अपरिवर्तित रहेंगी:
i=1;IFS=$'\n';for file in $layers; do mv $file ${file/#*_*/cropped_$((i++)).png}; done
mv: ‘cropped_1.png’ and ‘cropped_1.png’ are the same file
mv: ‘cropped_2.png’ and ‘cropped_2.png’ are the same file
mv: ‘cropped_3.png’ and ‘cropped_3.png’ are the same file
mv: ‘cropped_4.png’ and ‘cropped_4.png’ are the same file
mv: ‘cropped_5.png’ and ‘cropped_5.png’ are the same file
--More--
मैंने फ़ाइल नामों के साथ परीक्षण किया है जैसे cropped_2a.png
(नहीं -
) और यह लापता फ़ाइलों की समस्या को दोहराता है।
जब मैं mv -v
यह देखने की कोशिश करता हूं कि क्या चल रहा है, तो यह उम्मीद के मुताबिक फाइलों का नाम बदल रहा है, फिर भी जब मैं जांच करता हूं, तो फाइलें गायब होती हैं। दोहरे उद्धरण चिह्नों में पैरामीटर प्रतिस्थापन 1 ${file/#*_*/cropped_$((i++)).png}
को लपेटने से यह हल नहीं होता है।
i=1;IFS=$'\n';for file in $layers; do mv -v $file "${file/#*_*/cropped_$((i++)).png}"; done
‘cropped_2-a.png’ -> ‘cropped_2.png’
‘cropped_2-b.png’ -> ‘cropped_3.png’
‘cropped_2.png’ -> ‘cropped_4.png’
‘cropped_3-a.png’ -> ‘cropped_5.png’
‘cropped_3-b.png’ -> ‘cropped_6.png’
‘cropped_3.png’ -> ‘cropped_7.png’
‘cropped_4.png’ -> ‘cropped_8.png’
‘cropped_5.png’ -> ‘cropped_9.png’
‘cropped_6.png’ -> ‘cropped_10.png’
--More--
mv
विस्मरण तर्क काम करता है के रूप में पैरामीटर प्रतिस्थापन का उपयोग कर एक सरल आदेश का परीक्षण :
testy="cropped_2-b.png"
mv -iv $testy ${testy/#*_*/cropped_999.png}
यह भी काम करता है:
i=998
testy="cropped_2-b.png"
mv -iv $testy ${testy/#*_*/cropped_$((i++)).png}
'cropped_2-b.png' -> 'cropped_998.png'
testy="cropped_3-a.png"
mv -iv $testy ${testy/#*_*/cropped_$((i++)).png}
'cropped_3-a.png' -> 'cropped_999.png'
मैं यह निर्धारित करने में सक्षम नहीं हूं कि एक ही फाइल त्रुटि प्रदर्शित होने के बाद लूप के लिए यह विफल क्यों हो जाता है या जहां फाइलें वास्तव में जाती हैं।
i=1;IFS=$'\n';for file in $layers; do mv $file ${file/#*_*/./final/cropped_$((i++)).png}; done
hahaha मैं मदद नहीं कर सकता, लेकिन इस पर हंसी के साथ एक नई अवधि के लिए ले जाया गया ।