मैं सभी पाठ फ़ाइलों को खोलना चाहता हूं जो एक पाठ संपादक का उपयोग करके एलएस कमांड का परिणाम हैं। मैं यह कैसे करु?
मैं सभी पाठ फ़ाइलों को खोलना चाहता हूं जो एक पाठ संपादक का उपयोग करके एलएस कमांड का परिणाम हैं। मैं यह कैसे करु?
जवाबों:
गाइल्स बिल्कुल सही है , lsएक बहुत बुरा उदाहरण है क्योंकि फ़ाइल नाम ग्लोब विस्तार को कमांड लाइन पर बहुत आसान किया जा सकता है बिना उपयोग के ls! यदि आपकी तथाकथित "टेक्स्ट फाइलों" में उन्हें पहचानने के लिए फ़ाइल नाम एक्सटेंशन हैं, तो आप ऐसा कुछ कर सकते हैं:
editor-command *.txt
एक तकनीक का प्रदर्शन करने के लिए, एक अधिक जटिल उदाहरण का उपयोग करने देता है जो केवल फ़ाइल नाम के बजाय सामग्री के आधार पर केवल फ़ाइल नाम मिलान और खुली फ़ाइलों के साथ नहीं किया जा सकता है। कहते हैं कि आप सभी फ़ाइलों को खोलना चाहते थे जिनमें स्ट्रिंग "सामग्री-प्रकार" शामिल था।
मान लें कि आपका संपादक कई फ़ाइल नामों को स्वीकार करेगा और उन सभी को एक साथ अलग-अलग बफ़र्स में खोल देगा या क्रमिक रूप से यह उनके माध्यम से काम करेगा, तो आप बस चला सकते हैं:
editor-command $(grep -i content-type)
अब वापस अपने मूल प्रश्न पर, आपको यह बताने की अनुमति देता है कि क्या वे पाठ फ़ाइलें हैं या उनके नामों पर आधारित नहीं हैं। फिर आपको उन्हें पहचानने के लिए किसी अन्य प्रोग्राम का उपयोग करने की आवश्यकता होगी, फिर उन्हें उस डेटा के आधार पर खोलें। कार्यक्रम fileआपको बताएगा कि किस तरह की फ़ाइल है, और आप उस सूची को केवल पाठ फ़ाइलों के लिए तैयार कर सकते हैं, और फिर इस तरह से मेल खाने वाले फ़ाइल नामों को खोलें:
editor-command $(file -ni * | grep 'text/plain' | cut -d: -f1)
$()निर्माण के अंदर कमांड श्रृंखला के आउटपुट का उपयोग संपादक के लिए तर्क के रूप में किया जाएगा। मैं कभी-कभी दो चरणों में ऐसा करता हूं। कहो कि मैं फाइलों के कुछ सेट के माध्यम से देख रहा हूं और अपने आप को स्ट्रिंग "सामग्री-प्रकार" युक्त प्रत्येक xml फ़ाइल की सूची प्राप्त कर सकता हूं
find -type f -iname '*xml' | xargs grep -Hi 'content-type' | cut -d: -f1
... और फैसला मैं उन्हें खोलना चाहता हूं। मैं अंतिम कमांड इतिहास शॉर्टकट का उपयोग करता हूं और यह करता हूं:
vim $(!!)
... पिछले कमांड के सभी परिणामों को खोलने के लिए, मेरे पसंदीदा संपादक।
यदि आपका संपादक एक बार में केवल एक फ़ाइल को स्वीकार करेगा और आपको संपादकों को रखने की आवश्यकता है, तो आपको jmtd के उत्तर में xargsया तो forलूप के एक संस्करण का उपयोग करने की आवश्यकता होगी जो इस बात पर निर्भर करता है कि आप टर्मिनल आधारित संपादक का उपयोग कर रहे हैं जिसे stdio की आवश्यकता है।
वर्तमान निर्देशिका में कुछ .txt(यानी *.txt) नामक सभी फाइलों को खोलने के लिए :
$EDITOR *.txt
जहां $EDITORअपने पसंदीदा संपादक, है जैसे gedit *.txt, nano *.txt, vim *.txt, emacs *.txtया जो कुछ भी। *वर्तमान निर्देशिका में सभी फ़ाइलों का मिलान करने के लिए उपयोग करें ।
ध्यान दें कि lsकमांड शामिल नहीं है। lsवास्तव में फ़ाइलों की एक सूची प्रदर्शित करने का काम नहीं है, हालांकि ऐसा तब होता है जब आप इसे किसी निर्देशिका में लागू करते हैं। lsफ़ाइल विशेषताओं (संशोधन समय, अनुमतियाँ, आकार इत्यादि) को प्रदर्शित करने में कहाँ उपयोगी है। कुछ वाइल्डकार्ड पैटर्न से मेल खाती फाइलों के एक समूह पर कुछ करने के लिए, शेल के ग्लब्स पर्याप्त हैं।
उन्नत पर्याप्त संपादक आपको अंदर से ऐसा करने देते हैं। उदाहरण के लिए, Emacs में, बस सामान्य फ़ाइल ओपनिंग कमांड ( C-x C-f) का उपयोग करें और दर्ज करें *.txt।
अगर आप भी zsh या bash you4 में उपनिर्देशिकाओं में फाइलों का मिलान करना चाहते हैं, तो आप उपयोग कर सकते हैं $EDITOR **/*.txt।
यह आपके टेक्स्ट एडिटर की कुछ बारीकियों पर निर्भर करता है। उन्नत संपादक संभवतः एक उदाहरण में कमांड लाइन से कई फाइलें खोलने का काम कर सकते हैं। लेकिन उदाहरण के लिए, यह कहें कि आपका संपादक (नीचे मेरे उदाहरण में $ EDITOR) केवल एक समय में एक ही खोल सकता है। आप पाइप के लिए एक उपयुक्त का उत्पादन करना चाहिए findमें xargs। यह भी $ EDITOR TTY पर नहीं ले रहा है (इसलिए, चित्रमय का उपयोग करके) पर निर्भर करता है
find . -maxdepth 1 -type f -name '*.c' -print0 | xargs -r0n 1 $EDITOR
यदि आप एक कंसोल एडिटर का उपयोग करना चाहते हैं, तो एक शेल लूप अधिक उपयुक्त हो सकता है, लेकिन यदि आप कई असामान्य फ़ाइलनामों के लिए विफल हो जाएंगे (व्हाट्सएप वर्णों और विभिन्न अन्य चीजों को ढहाने या प्रतिस्थापित करके):
for i in *.c; do $EDITOR "$i"; done
forव्हाट्सएप वर्णों के ढहने / बदलने सहित कई फ़ाइलनामों के लिए मामला विफल हो जाएगा।
forमामले हर फ़ाइल नाम के साथ (संभवतः नाम के साथ शुरुआत को छोड़कर काम करेंगे -या +कुछ संपादकों के साथ; for i in ./*.cकि ठीक होगा)।
editor-command *.css, आदि