/ आदि से "a" या "c" से शुरू होने वाली फ़ाइलों को कैसे सूचीबद्ध करें। [बन्द है]


10

मैंने कोशिश की ls /etc/[ac]*, लेकिन यह के साथ शुरू निर्देशिका से पता चलता एक या , और उनके संपूर्ण सामग्री, नहीं फ़ाइलें "से आरंभ एक " या " सी "।


निर्देशिका कई प्रकार की फ़ाइलों में से एक हैं । आप किस प्रकार की फ़ाइलों में रुचि रखते हैं (नियमित, सिमलिंक, डिवाइस, पाइप, सॉकेट ...)?
स्टीफन चेजेलस

यह स्पष्ट नहीं है कि आप "निर्देशिका" द्वारा निर्देशिकाओं की सामग्री के बारे में बात कर रहे हैं , या निर्देशिका के नामों के बारे में खुद बता रहे हैं। आप जो कमांड दिखाते हैं, वह उन निर्देशिकाओं की सामग्री को सूचीबद्ध करेगा जो पैटर्न से मेल खाते हैं, साथ ही ls -d /etc/[ac]*आपको मिलान निर्देशिकाओं की सामग्री नहीं मिलेगी, लेकिन फिर भी निर्देशिका नाम देखेंगे। यह स्पष्ट नहीं है कि यह वही है जो आप चाहते हैं या यदि आप निर्देशिका नामों को सूचीबद्ध करने से बचना चाहते हैं।
Kusalananda

जवाबों:


23

निर्देशिका की सामग्री को सूचीबद्ध करने से बचने के लिए, आप कर सकते हैं:

ls -d /etc/[ac]*

यह सामान्य नाम के साथ या साथ शुरू होने वाले निर्देशिका नामों को सूचीबद्ध करेगा ।ac

पूर्णता के लिए, एक समाधान शामिल नहीं findहो सकता है:

ls -ld /etc/[ac]* | grep ^- | tr -s ' ' | cut -d' ' -f9

प्रश्न का मेरा प्रारंभिक वाचन भी ls -dउचित प्रतीत होता है, लेकिन ऐसा लगता है कि मूल प्रश्न यह निर्दिष्ट करता है कि विस्तार या गैर-विस्तार की परवाह किए बिना कोई निर्देशिका सूचीबद्ध नहीं होनी चाहिए।
क्रिस डाउन

1
ls -ld /etc/[ac]* | grep ^- | tr -s ' ' | cut -d' ' -f9पार्स मत करो ls
अविनाश राज

1
@AvinashRaj: ठीक है, उस सलाह की प्रासंगिकता इस बात पर निर्भर करती है कि किसी को एक बार या हमेशा के लिए इस समाधान की आवश्यकता है या नहीं। यदि केवल एक बार, तो lsमेरी राय में पार्सिंग उचित खेल है।
ग्रेग हेविल

3
उसके पास एक बिंदु है। जबकि नाम /etcबहुत ही स्पष्ट होने की संभावना है, एक साधारण स्थान lsदृष्टिकोण को तोड़ देगा क्योंकि फ़ील्ड संख्या बदल जाएगी। ls -ldहालांकि के लिए +1 ।
terdon

1
आपको लोकेल ( LC_ALL=C) को ठीक करने की भी आवश्यकता है , अन्य स्थानों में दिनांक 3 फ़ील्ड की गारंटी नहीं है।
स्टीफन चेजालस

7

रिकर्सिवली:

find /etc -type f -name '[ac]*'

यदि आपको गैर-पुनरावृत्ति की आवश्यकता है, तो आप इसे आंशिक रूप से कर सकते हैं:

find /etc/. ! -name . -prune -type f -name '[ac]*'

या यह, गैर-पोर्टेबली (GNU या हाल ही में BSD खोजें):

find /etc -type f -maxdepth 1 -name '[ac]*'

यदि आप इस मामले को असंवेदनशील करना चाहते हैं, तो -inameइसके बजाय उपयोग करें -name


1
ध्यान दें कि -type fके लिए है नियमित रूप से फ़ाइलें । यदि इसके बजाय आपको गैर-निर्देशिका फ़ाइलों की आवश्यकता होती है, तो ! -type d(या ! -xtype dGNU के साथ बदलें findयदि आप निर्देशिकाओं के लिए सीमलिंक को बाहर करना चाहते हैं)।
स्टीफन चेज़लस

1

आप इस आदेश को भी आजमा सकते हैं,

for file in /etc/[ac]*; do echo $file; done | xargs file | awk -v FS=" +" '$2~/directory/ {next;} {print $1}' | sed 's|\/etc\/||g;s/://g'

1

यदि आप दोनों डायरेक्टरीज़ (निर्देशिका की सामग्री नहीं) और फ़ाइलें चाहते हैं, तो आप printfbultin का उपयोग कर सकते हैं :

printf "%s\n" [ac]*

उदाहरण:

$ printf "%s\n" [te]*
examples.desktop
teamviewer_linux.deb
test.php
test.txt

यह कैसे निर्देशिका से बचना होगा, जैसा कि प्रश्न में अनुरोध किया गया है?
क्रिस डाउन

ओह, मेरी गलतफहमी। मुझे लगता है कि ओपी को डायरेक्टरी चाहिए लेकिन इसके कंटेंट की नहीं।
कोउंगलम

उस संपादन के बारे में क्षमा करें, पूरी तरह से गलत है।
terdon

1

बिना पुनरावर्ती find:

ls -pd /etc/[ac]* | grep -v '/$'

-pएक कहते हैं /निर्देशिकाओं के लिए अंत है, जिस पर grepबाहर फिल्टर। बेशक उन फिल्नामों के लिए काम नहीं करता है, जिनमें नए किरदारों जैसे खास किरदार हैं।


1

के साथ zsh:

print -rl /etc/[ac]*(.)

सूची चाहेंगे नियमित फ़ाइलें (के रूप -type fमें find) में सूचीबद्ध /etcके साथ शुरू होता है जिसका नाम aया c(xxx)एक ग्लोब के अंत में हिस्सा एक zsh-विशिष्ट सुविधा क्वालीफायर ग्लोबिंग कहा जाता है। .ग्लोबिंग क्वालिफायर के रूप में नियमित फ़ाइल का मतलब है ।

यदि ग्लोब मेल नहीं खाता है, zshतो कमांड को निरस्त कर देगा। ध्यान दें कि अन्य बॉर्न-जैसे गोले में, यदि ग्लोब मेल नहीं खाता है, तो पैटर्न अपने आप फैलता है, इसलिए ls -d /etc/[ac]*गलत फाइल को सूचीबद्ध कर सकता है /etc/[ac]*यदि कोई फाइल शुरू नहीं होती है aया उसके साथ शुरू नहीं होती cहै /etc

print -rl /etc/[ac]*(^/)

उन फ़ाइलों को सूचीबद्ध करेगा जो प्रकार निर्देशिका की नहीं हैं और

print -rl /etc/[ac]*(-^/)

उन फ़ाइलों को सूचीबद्ध करेगा जो सहानुभूति को हल करने के बाद टाइप डायरेक्टरी के नहीं हैं।


-3

प्रदर्शन फ़ाइलों के लिए एक के साथ शुरू:

ls etc |  grep ^a

सी के साथ शुरू होने वाली फाइलों को प्रदर्शित करने के लिए:

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