मैं सभी पाठ फ़ाइलों को खोलना चाहता हूं जो एक पाठ संपादक का उपयोग करके एलएस कमांड का परिणाम हैं। मैं यह कैसे करु?
मैं सभी पाठ फ़ाइलों को खोलना चाहता हूं जो एक पाठ संपादक का उपयोग करके एलएस कमांड का परिणाम हैं। मैं यह कैसे करु?
जवाबों:
गाइल्स बिल्कुल सही है , 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
, आदि