कभी-कभी हमें अपने पीसी पर दोहराए जाने वाले कार्य करने पड़ते हैं, जो समय के साथ कठिन हो जाते हैं। कुछ मामलों में हम उन स्क्रिप्ट्स का उपयोग करके अपना काम आसान कर सकते हैं जो हमारे लिए काम करती हैं।
आज मैं आपको एक बैश स्क्रिप्ट दिखाने के लिए लिख रहा हूं जिसने एक आवश्यकता को हल किया: मेरे डिजिटल कैमरे से एसडी कार्ड से पीसी पर नई छवियों को कॉपी करने के लिए।
स्थिति:
जब भी मेरे कंप्यूटर पर डाउनलोड करने के लिए नई छवियां होतीं, मैं निम्नलिखित कदम उठाता:
1. वह निर्देशिका खोलें जहां मेरे पास उप-निर्देशिकाओं में वर्गीकृत छवियां हैं।
2. yy.mm.dd प्रारूप में वर्तमान दिनांक के नाम के साथ एक नई उप-निर्देशिका बनाएं
3. पिछली बार बनाई गई उप-निर्देशिका पर जाएँ और देखें कि अंतिम सहेजी गई छवि क्या है।
4. एसडी कार्ड से नई छवियों को नव निर्मित निर्देशिका में कॉपी करें।
इसमें एक मिनट से अधिक समय नहीं लगता है, लेकिन यदि प्रक्रिया केवल कार्ड डालकर की जाए तो यह आसान है।
समाधान:
एक बैश स्क्रिप्ट बनाएं जो निम्नलिखित कार्य करे:
1. स्टार्टअप पर जांचें कि एसडी कार्ड माउंट है या नहीं। नहीं तो ख़त्म हो जाता है.
2. छवियों की मुख्य निर्देशिका पर जाएं और अंतिम को देखें। इसका नाम एक वेरिएबल में सेव करें।
3. वर्तमान दिनांक की तुलना अंतिम निर्देशिका से करें, यदि वे भिन्न हैं, तो "yy.mm.dd" प्रारूप में वर्तमान दिनांक के नाम से एक नई निर्देशिका बनाएं।
4. अंतिम निर्देशिका पर जाएँ (नई नहीं, बल्कि पुरानी निर्देशिका) और पिछली बार स्थानांतरित की गई अंतिम फ़ाइल का नाम एक वेरिएबल में सहेजें।
इस चरण में फ़ाइल के नाम को फ़िल्टर करना आवश्यक है ताकि कार्ड पर नई फ़ाइलों के साथ इसकी तुलना शीघ्र की जा सके। फ़ाइलों का प्रारूप निम्न है: XXX_xxxx.ईईई कहां: x= अंक 0 से 9 और ईईई= विस्तार (जेपीजी, एमओवी)। उदाहरण के लिए: 100_5684.JPG, 100_5699.MOV. फिल्टर के बाद नाम xxxxxxx ही रहता है इसलिए, उपरोक्त उदाहरण में, हमारे पास होगा: 1005684, 1005699।
चूँकि निर्देशिका में अन्य प्रकार की फ़ाइलें या परिवर्तित नाम हो सकते हैं, इसलिए फ़िल्टर का उपयोग किया जाता है।
5. कार्ड पर जाएँ और पिछले बिंदु की तरह फ़ाइलों को फ़िल्टर करें।
6. कार्ड पर मौजूद फ़ाइलों की तुलना पिछली बार स्थानांतरित की गई अंतिम फ़ाइल वाले वेरिएबल से करें (बिंदु 4) और नामित फ़ाइलों को नई बनाई गई निर्देशिका में कॉपी करें चर से अधिक. (चूँकि नाम केवल संख्याएँ हैं)।
7. फ़ाइल प्रबंधक के साथ वह निर्देशिका खोलें जिसमें नई छवियां हैं।
नीचे मैं आपको टिप्पणियों के साथ स्क्रिप्ट दिखाता हूं जो बताती है कि यह कैसे काम करती है। मैं स्पष्ट करता हूं कि मैं एक प्रोग्रामर नहीं हूं और जब तक मैं इसे काम पर नहीं ले आया, इसने मुझे कई सिरदर्द दिए, खासकर जब मुझे "फॉर" लूप के लिए नामों को फ़िल्टर करना पड़ा।
#!/bin/bash ### --- जांचें कि क्या SD माउंट किया गया है --- ### SD=/media/KODAK/DCIM/100Z8612 यदि [[ -d $SD ]]; फिर ### --- निर्देशिका बनाएं --- ### #छवि निर्देशिका पढ़ें और वर्तमान #दिनांक और अनुमतियाँ 755 के नाम से एक और निर्देशिका बनाएं यदि यह मौजूद नहीं है। सीडी ~/छवियां/कोडक ULTDIR=`ls -1 | टेल -एन1` # अंतिम निर्देशिका सूचीबद्ध। DATE=`date +%y.%m.%d` #वर्तमान दिनांक YY.MM.DD प्रारूप में यदि [ "$LASTDIR" != "$DATE" ]; फिर mkdir -vm 755`date +%y.%m.%d`# वर्तमान दिनांक के साथ निर्देशिका बनाएं fi ### --- $ULTDIR से अंतिम फ़ाइल देखें --- ### cd $ULTDIR ULTIMG=`ls - 1 [0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]।[जेएम][पीओ][जीवी] | पूँछ -n1 | कट -c1-3,5-8` # xxx_XXXX.eee नामक अंतिम छवि देखें .eee = फ़ाइल एक्सटेंशन (JPG या MOV) #यह सुनिश्चित करने के लिए कि स्क्रिप्ट मैच के बाद काम करती है: # 100_9999.eee -- > 101_0000.eee और कोई त्रुटि नहीं # xxxXXXX को प्रारूपित करने के लिए काटें ### --- सूचीबद्ध अंतिम निर्देशिका पर जाएं --- ### # या हाल ही में बनाई गई निर्देशिका, यदि बनाई गई है तो # सीडी .. LASTDIR= `ls -1 | टेल -एन1` # फिर से जाएं अन्यथा पिछला यूएलटीडीआईआर लें यदि सीडी /मीडिया/कोडक/डीसीआईएम/100जेड8612 ### --- एसडी पर फाइलों को फिल्टर करें --- ### फिल्टर=`एलएस -1 [0 -9][ 0-9][0-9]_[0-9][0-9][0-9][0-9].[जेएम][पीओ][जीवी]` ### -- - नई फ़ाइलों की तुलना करें नाम का पिछले से बड़ा --- ### for I in $Filter do N=`echo $I | कट -सी1-3,5-8` #नाम काटें यदि [[ "$ULTIMG" -lt "$N" ]]; फिर cp $I ~/Images/kodak/$ULTDIR fi डन थूनर ~/Images/kodak/$ULTDIR #Thunar के साथ नई निर्देशिका खोलें अन्यथा बाहर निकलें 0 fi बाहर निकलें 0
अंततः इसे काम में लाने के लिए मैंने इसे मेनू में Xfce के "रिमूवेबल ड्राइव्स एंड मीडिया" ऐप में जोड़ा
सेटिंग्स → Xfce 4 सेटिंग्स मैनेजर → हटाने योग्य ड्राइव और मीडिया → कैमरे
आयात छवि विकल्प का उपयोग करना। जब मैं कार्ड डालता हूं, तो एक संवाद बॉक्स पूछता है कि क्या मैं छवियां आयात करना चाहता हूं। स्वीकृति पर, स्क्रिप्ट निष्पादित की जाती है।
हां इसी तरह। गंदे पाठ के लिए क्षमा करें, यह मेरी पहली पोस्ट है और मुझे नहीं पता कि इसे संपादित करते समय स्क्रिप्ट को कैसे सारणीबद्ध किया जाए। मुझे आशा है कि कम से कम किसी के लिए एक विचार रखना और उसे प्रत्येक विशेष मामले में अपनाना उपयोगी होगा।
बहुत दिलचस्प जोक्विन, एक अच्छा विचार स्क्रिप्ट को पेस्ट में अपलोड करना है जहां कोड साझा करना आसान है, और जैसा कि आप कहते हैं कि इसे अन्य आवश्यकताओं के लिए अनुकूलित किया जा सकता है और व्यक्ति बैश का थोड़ा और उपयोग करना सीखता है।
नमस्ते!
हो गया, जोड़ा गया http://paste.desdelinux.net/4737
ग्रेसियस!
निर्देशिका में पहले से मौजूद किसी तस्वीर की प्रतिलिपि बनाते समय, क्या यह आपको यह नहीं बताता कि वहाँ पहले से ही एक तस्वीर मौजूद है और क्या यह आपको इसे बदलने या कॉपी न करने का विकल्प नहीं देता है?
वैसे भी यह बहुत उपयोगी है, क्योंकि यह सब कुछ स्वचालित रूप से करता है
नमस्ते। यह वास्तव में दोहराई गई छवियों की प्रतिलिपि नहीं बनाता है, यह सिर्फ उन्हें अनदेखा करता है। विचार सटीक रूप से उपयोगकर्ता सहभागिता की आवश्यकता के बिना नई फ़ाइलों की प्रतिलिपि बनाने का था। साथ ही, जब तक आप दिन में एक से अधिक बार छवियां नहीं जोड़ते, स्क्रिप्ट नई फ़ाइलों को एक नई निर्देशिका में कॉपी कर देती है। मैं आपको संक्षेप में समझाऊंगा:
आज 10/03/13 है, मैं 13.03.10 नामक एक निर्देशिका बनाता हूं और इसमें कुछ चित्र या वीडियो (एमओवी) कॉपी करता हूं: 100_4440.जेपीजी, 100_4441.जेपीजी, 100_4442.एमओवी, 100_4445.जेपीजी
(लापता 4443 और 4444 को कैमरे से मिटा दिया गया, आखिरी वाला 4445 है)।
तो फिर मान लीजिए कि मैं 01/04/13 को स्क्रिप्ट का उपयोग करता हूं और कार्ड पर नई छवियां हैं। स्क्रिप्ट 13.04.01 नामक एक निर्देशिका बनाती है और नई छवियों/वीडियो के अंदर जिसका नाम "4445" से बड़ा है; क्योंकि यह 13.03.10 निर्देशिका को पढ़ता है और अंतिम छवि 100_4445.JPG है। यदि मैं उसी दिन नई कार्ड छवियों के साथ स्क्रिप्ट को फिर से चलाता हूं, तो उन्हें 13.04.01 निर्देशिका में जोड़ दिया जाता है। कोई भी अधिलेखित नहीं है.
मुझे आशा है कि मैंने अपना विचार थोड़ा स्पष्ट कर दिया है 🙂
और आप रैपिड फोटो डाउनलोडर नहीं जानते? मुझे लगता है कि यह वह सब और उससे भी अधिक करता है।
सवाल यह है कि स्कीनी ने इसे स्वयं किया, मुझे लगता है कि उसे मजा आया होगा और यह किसी और के लिए उपयोगी हो सकता है
नमस्ते। मैं इसे नहीं जानता था और मैंने इंटरनेट पर जो देखा उससे यह अच्छा लगता है, लेकिन वास्तव में स्क्रिप्ट पूरी तरह से मेरी ज़रूरतों को पूरा करती है; जो कार्ड डालने और सभी फाइलों को स्वचालित रूप से कॉपी करने के लिए है।
इससे मुझे कुछ और सीखने में भी मदद मिली क्योंकि जाहिर तौर पर यह पहली बार काम नहीं आया; गलतियाँ हुई हैं और आप उनसे बहुत कुछ सीख सकते हैं।
मैं दूसरों की समस्या निवारण के लिए स्क्रिप्ट नहीं दिखाने जा रहा था, आपके द्वारा बताए गए ऐप्स जैसे ऐप्स अधिक सामान्य हैं। मैंने इसे आपके पढ़ने के लिए और लूप्स (इस मामले में "के लिए") और रेगुलर एक्सप्रेशन (स्क्रिप्ट में "ULTIMG" और "फ़िल्टर" वेरिएबल्स) का उपयोग करके नई चीजें बनाने के संदर्भ के रूप में साझा किया है।
यह उपयोगी लगता है, मैं इसे अपने पास रख रहा हूँ अगर किसी दिन मुझे इसकी आवश्यकता पड़े। धन्यवाद।
ग्रेसियस!
लेकिन उसके लिए हमारे पास पहले से ही grsync है
हाँ, लेकिन मुझे लगता है कि rsync का उपयोग बैकअप के लिए अधिक किया जाता है। मैंने इस पर कभी गौर नहीं किया है लेकिन यह एक ऐसा एप्लिकेशन है जिसे हम सभी को ध्यान में रखना चाहिए और इसका उपयोग करना सीखना चाहिए।
मुझे नहीं पता था कि rsync के लिए कोई ग्राफ़िकल इंटरफ़ेस है।
वाह, मुझे कोड बहुत दिलचस्प, बहुत उपयोगी लगा। इसे जारी रखो। 😀
यदि मुझे इसकी आवश्यकता होगी तो मैं इसे रखूंगा।
नमस्ते.
धन्यवाद!।