फ़ोल्डर में प्रत्येक फ़ाइल के लिए bash कमांड


31

मेरे पास फ़ाइलों का एक सेट है जिस पर मैं एक ही कमांड लागू करना चाहता हूं और आउटपुट में संसाधित फ़ाइल के समान नाम होना चाहिए लेकिन एक अलग एक्सटेंशन के साथ।

वर्तमान में मैं नाम बदल रहा हूं /my/data/Andrew.doc to /my/data/Andrew.txt मैं यह करना चाहूंगा / .doc फ़ाइलों के लिए / मेरे / डेटा / फ़ोल्डर से और नाम संरक्षित करने के लिए।

मैं कई संस्करणों की कोशिश की, लेकिन मुझे लगता है कि मैं वाक्य रचना में कुछ गलत है के रूप में मैं एक नया करने के लिए linux।


→ थोड़ा और पूर्ण और व्यावहारिक उदाहरण: stackoverflow.com/a/43474757/444255
फ्रैंक नॉक

जवाबों:


76

इसके करीब से कम से कम एक लाख मिलियन अलग-अलग तरीके हैं लेकिन यहाँ शीर्ष दावेदार हैं:

पाश के लिए बैश

for f in ./*.doc; do
    # do some stuff here with "$f"
    # remember to quote it or spaces may misbehave
done

का उपयोग करते हुए find

findआदेश एक सुंदर छोटी सी है execआदेश है कि (कुछ कैविएट्स के साथ) चीजों को चलाने के लिए बहुत अच्छा है। ढूँढें मूल ग्लोबिंग से बेहतर है क्योंकि आप वास्तव में उन फ़ाइलों पर फ़िल्टर कर सकते हैं जिन्हें आप चुन रहे हैं। विषम सिंटैक्स से सावधान रहें।

find . -iname '*.doc' -exec echo "File is {}" \;

ध्यान दें कि findपुनरावर्ती है ताकि आप वर्तमान कार्यशील निर्देशिका में -maxdepth 1रखने के लिए उपयोग करना चाहें find-type fनियमित फ़ाइलों को फ़िल्टर करने के लिए उपयोग किया जा सकता है।

अगर हम सिर्फ txt का नाम बदल रहे हैं ...

renameआदेश खोज में sed की तरह है। जाहिर है कि यह प्रारूप को बदलने के लिए कुछ भी नहीं करेगा।

rename 's/doc$/txt/' *.doc

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.