स्वचालित बैश / स्क्रिप्ट कैसे जनरेट करें


0

मैं सिस्टम की तरह टर्मिनल और यूनिक्स के लिए नया हूं। मैं स्वचालित रूप से एक बैच फ़ाइल बनाने का तरीका खोज रहा हूँ।

मान लें कि मेरे पास फ़ोल्डर में फ़ाइलों का एक गुच्छा है, और मैं निर्माण तिथियां बदलना चाहता हूं। जैसा कि अभी है, मुझे touch -t 201704011215.00 Desktop/Old_cam_vids_converted_from_avi_to_mp4/file0001.mp34प्रत्येक फ़ाइल के लिए है। जो मैं करना चाहता हूं वह कुछ इस तरह है: ls -lT /Desktop/Old_avi_to_conv/*.aviऔर टच कमांड के लिए टाइम-डेट पैरामीटर के रूप में प्रत्येक फ़ाइल के लिए तारीख और समय है।

मैं यह कैसे हासिल कर सकता हूं?

संपादित करें: मुझे आशा है कि स्पष्टीकरण स्पष्ट हो जाएगा। यह परिदृश्य है:

  • डेस्कटॉप पर दो फ़ोल्डर जिसमें वीडियो फाइलें हैं।
  • एक (folder_1) में मूल फाइलें शामिल हैं (.avi)
  • दूसरी (folder_2) में कनवर्ट की गई फ़ाइलें (.mp4) हैं

  • दूसरे फ़ोल्डर की सभी फाइलों में एक नई अनुक्रमिक तिथि होती है, क्योंकि रूपांतरण उपकरण को फाइलों की सूची के माध्यम से काम किया जाता है।

  • मुझे पहले फ़ोल्डर में मूल फ़ाइल से दिनांक / समय टिकट लेने की आवश्यकता है, और इसे दूसरे फ़ोल्डर में परिवर्तित फ़ाइल में असाइन करना है।

  • पहले फ़ोल्डर की प्रत्येक फ़ाइल में एक अलग तारीख है, संभवतः दिन और महीने अलग।

  • दूसरे फ़ोल्डर में फाइलें पहले वाले फ़ोल्डर की तुलना में एक ही नाम की हैं, फ़ाइल प्रत्यय को छोड़कर, जैसे: folder_1 / CIMG_0001.avi folder_2 / CIMG_0001.mp4 folder_1 का मूल है / PIC_0003.avi folder_2 का मूल है /PIC_0003.mp4 folder_1 / PIC_0015.avi फ़ोल्डर का मूल है_2 / PIC_0015.mp4 folder_1 / CIMG_003.avi id का मूल फ़ोल्डर_2 / CIMG_0003 .mp4


आप -rस्पर्श के साथ विकल्प का उपयोग करेंगे, जैसे कि touch -r /path/to/file.avi /path/to/file.mp4। यह अभी भी निर्माण / जन्म के समय को नहीं बदलेगा। इसके लिए आप इसका उपयोग करेंगे SetFile
fd0

@ fd0 उस जानकारी के लिए धन्यवाद। तो क्या कोई ऐसा तरीका है जो शायद "ls" के साथ-साथ सही विकल्प "ls -lT" का उपयोग करके folder_1 में फ़ाइलों की सूची बना सकता है और "स्पर्श" या "SetFile" के लिए इनपुट के रूप में आउटपुट है?
रेनो

जवाबों:


2

आपको प्रत्येक mp4फ़ाइल को व्यक्तिगत रूप से संसाधित करने की आवश्यकता है :

cd folder_2
for m in *.mp4; do
    a="${m%.mp4}".avi
    if [[ -r "/path/to/folder_1/$a" ]]; then
         echo touch -r "/path/to/folder_1/$a" "$m"
    fi
done

एक बार यह सत्यापित करने के लिए चलाएं कि उत्पन्न आउटपुट समझ में आता है, फिर echoऔर फिर से निकालें ।

पुनश्च: यह मानता है कि वीडियो फ़ाइलों के नामों में स्ट्रिंग ".mp4" नहीं है।


लाइन a="${a%.mp4}".aviहोनी चाहिए a="${m%.mp4}".avi
fd0

@ fd0 सच में सच। किसी भी अन्य त्रुटियों आप :-) मिल सकता है तय करने के लिए स्वतंत्र महसूस
nohillside

मुझे कोई अन्य त्रुटि नहीं दिख रही है, हालांकि मैं यह बताऊंगा कि विस्तारित कोष्ठक ([]) ${m%.mp4}में चर को उद्धृत करने की आवश्यकता नहीं है और न ही चर aअसाइनमेंट में। -rपरीक्षण एक सिमलिंक या बात के लिए किसी भी फाइल सिस्टम वस्तु का पालन कर सकते हैं। कुल मिलाकर एक अच्छा जवाब।
fd0

@ fd0 मुझे उद्धरण के बारे में पता है, लेकिन विशेष मामलों को ध्यान में रखने की तुलना में हर बार सिर्फ फ़ाइल नाम का उद्धरण करना आसान है।
nohillside
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.