2012-09-28 10 views
11

Possible Duplicate:
How can I use inverse or negative wildcards when pattern matching in a unix/linux shell?सूची सभी फ़ाइलें चयनकर्ता से मेल नहीं खाते (ls का उपयोग कर)

मैं ls के लिए man पेज पढ़ा है, और मैं यह सब कर नहीं सूची फ़ाइल चयनकर्ता से मेल विकल्प नहीं मिल सकता है । क्या आप जानते हैं कि इस ऑपरेशन को कैसे करें?

उदाहरण के लिए: कहना मेरी निर्देशिका यह है की सुविधा देता है:

> ls 
a.txt b.mkv c.txt d.mp3 e.flv 

अब मैं निम्नलिखित

> ls -[SOME_OPTION] *.txt 
b.mkv d.mp3 e.flv 

कुछ है कि नहीं करता है करना चाहते हैं वहाँ इस तरह के एक विकल्प है?

यदि नहीं, तो ls के आउटपुट को अन्य फ़ंक्शन (संभवतः sed) पर आउटपुट करने का कोई तरीका है जो केवल मुझे दिखाएगा?

मैं बिल्कुल ऐसा करने के तरीके पता नहीं, लेकिन मैं इसे की तरह कुछ होगा की कल्पना कर रहा हूँ:

> ls | sed [SOMETHING] 

मैं वास्तव में sed, awk, और grep उपयोग करने के लिए कैसे सीखना चाहिए, लेकिन मैं रखना Regexes लिखने के तरीके को समझने पर अटक गया। मैं नियमित अभिव्यक्तियों की अवधारणा को स्पष्ट रूप से समझता हूं, लेकिन मैं विभिन्न वाक्यविन्यास का उपयोग करने वाले रेगेक्स के बीच भ्रमित हो जाता हूं।

किसी भी मदद की बहुत सराहना की जाएगी!

संपादित करें:

मैं भूल गया था कि मैं मैक ओएस एक्स चला रहा हूँ, इसलिए कार्यों लोगों यूनिक्स/लिनक्स खोल के लिए अन्य उत्तर में चर्चा (इसलिए मेरी भ्रम में से कुछ से थोड़ा अलग हो सकता है उल्लेख करने के लिए sed, awk, और grep के साथ)।

उत्तर

16

शायद इस आदेश आप

find ./ -maxdepth 1 ! -path "*txt" 
+0

यह' पथ 'पैरामीटर के रूप में कई अलग-अलग चयनकर्ताओं के साथ अच्छी तरह से काम करता है धन्यवाद! एक चीज़ जो मैंने पाया वह था कि मैं 'ढूंढ सकता हूं। -मैक्सडेपथ 1! -पैथ "* txt" ' अब अगर मुझे सूची फ़िल्टर करने के लिए रेगेक्स था तो मुझे क्या उपयोग करना होगा? –

+0

आप Regex का उपयोग करना चाहते हैं, grep का उपयोग करें। ex। आपके पास 3 एबीसी जैसे "abc" हैं, ls | grep -v "[a | b]" का उपयोग करें, फिर यह c प्रदर्शित करेगा। और फिर यदि आपके पास 3 फाइलें aa aaaa हैं, "एलएस | का प्रयोग करें grep -v "a +", तो यह केवल "ए" प्रदर्शित करेगा। –

+0

./ तर्क वैकल्पिक है क्योंकि कमांड पहले से ही मौजूदा निर्देशिका पेड़ से खोजना शुरू कर देता है – kante

9
ls|grep -v ".txt" 

इससे मदद मिलती है?

+0

यह आपके द्वारा दिए गए मामले के लिए काम करता है, लेकिन वास्तव में मैं किसी भी चयनकर्ता के साथ काम करने वाली चीज़ की तलाश में हूं। उदाहरण के लिए, अगर मैं उन लोगों को नहीं दिखाना चाहता था जिनके पास 'x' अक्षर था, तो 'इन' शब्द के बाद, मुझे' * x * in * 'selector का उपयोग करने की आवश्यकता है। मुझे लगता है कि आपके उदाहरण का उपयोग करना संभव नहीं होगा। –

+0

@ कौशिकशंकर मुझे लगता है कि यह काम करेगा। कोशिश करो। –

3

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

find . -maxdepth 1 -type f -not -name "*.txt" -printf "%f\n" 
+0

आपकी प्रतिक्रिया के लिए धन्यवाद! दुर्भाग्य से, मुझे लगता है कि मैक ओएस एक्स पर चलने में कोई समस्या हो सकती है। मुझे जो त्रुटि मिलती है वह निम्न है: कमांड: '> ढूंढें। -मैक्सडेपथ 1-प्रकार एफ-नोट -नाम "* .txt" -printf "% f \ n" ' त्रुटि: ' 39m \ n "ढूंढें: -प्रिंटफ: अज्ञात प्राथमिक या ऑपरेटर' –

+0

@ कौशिकशंकर: हाँ अनदेखा करें printf कथन, यह आपके आउटपुट को केवल 'ls' कैसे काम करेगा, इस तरह की फाइलों की सूची प्रदान करने के लिए आपके आउटपुट को साफ करेगा। ऐसा लगता है कि' बीएसडी खोज 'इसे समझ में नहीं आता है। – Steve

3

ls में मदद मिलेगी सिर्फ सूचीबद्ध करता है क्या तर्क इसके साथ प्रस्तुत किया है। *.txt से एलएस से पहले इसे देखता है, echo *.txt आज़माएं।

क्या आप साथ पूछना ऐसा करने के लिए sed आप उदाहरण के लिए, अपने इनपुट से पैटर्न को नष्ट कर सकते हैं:

ls | sed '/\.txt$/d' 

.txt के साथ समाप्त सभी पंक्तियों को हटा दें चाहेंगे।

बैश और zsh आप खोल उल्टे विस्तार करना हो सकता है के साथ

, बैश के साथ यह होगा:

ls !(*.txt) 

zsh:

ls *~*.txt 

नोट दोनों गोले की जरूरत है कि विस्तारित ग्लोब विकल्प सक्षम होना चाहिए, बैश और setopt extendedglobzsh के साथ

+1

मुझे एक और zsh सुविधा दिखाने के लिए धन्यवाद! यह विस्मयकारी है। –

34

यह आप

ls मदद की जा सकती है --ignore = *। Txt

यह अपने निर्देशिका में .txt फ़ाइलें प्रदर्शित नहीं करेगा। यह आपके प्रश्न के लिए सही उत्तर है।

+1

यह मेरे लिए अच्छा काम करता है। आप एक साथ स्ट्रिंग - हस्ताक्षर स्विच कर सकते हैं, और इस प्रकार अनदेखा कर सकते हैं उदा। सभी txt फ़ाइलें, एजे से शुरू होने वाली सभी फाइलें और 'bar' वाले नाम वाली सभी फाइलें: 'ls --ignore = *। txt --ignore = j * --ignore = * bar *' –

+0

मुझे अवैध विकल्प मिलता है जब मैं एल कैपिटन एलएस --ignore = * पीडीएफ एलएस: अवैध विकल्प - - उपयोग: एलएस [-एबीसीएफएचएलओएलआरटीयूयूएबीसीडीएफघिक्लमनोप्क्क्रस्ट्यूएक्स 1] [फाइल ...] –

+1

धन्यवाद। दरअसल यह स्वीकार्य उत्तर होना चाहिए !! – Veera

संबंधित मुद्दे