Linux DOS "dir / s / b फ़ाइल नाम" के बराबर है?


17

वर्तमान फ़ाइल के नीचे या उससे नीचे की सभी फाइलों की सूची बनाएँ, जो 'फ़ाइलनाम' से मेल खाती हैं।

जवाबों:


28

सीधा बराबर है

find . -iname <filename>

जो सभी फाइलों और निर्देशिकाओं <filename>को वर्तमान निर्देशिका और किसी भी उपनिर्देशिका, मामले की अनदेखी के मामले में सूचीबद्ध करेगा ।

यदि आपके खोज का संस्करण समर्थन नहीं करता है -iname, तो आप -nameइसके बजाय उपयोग कर सकते हैं । ध्यान दें कि इसके विपरीत -iname, -nameमामला संवेदनशील है।

यदि आप केवल नामक फाइलों को सूचीबद्ध करना चाहते हैं <filename>, और निर्देशिकाओं को नहीं जोड़ते हैं-type f

find . -iname <filename> -type f

यदि आप वाइल्डकार्ड का उपयोग करना चाहते हैं, तो आपको इसके चारों ओर उद्धरण लगाने की आवश्यकता है, जैसे

find . -iname "*.txt" -type f

अन्यथा शेल इसका विस्तार करेगा।

जैसा कि दूसरों ने बताया है, आप भी कर सकते हैं:

find . | grep "\.txt$"

grep नियमित अभिव्यक्तियों के आधार पर लाइनें प्रिंट करेंगे, जो वाइल्डकार्ड की तुलना में अधिक शक्तिशाली हैं, लेकिन एक अलग वाक्यविन्यास है।

देखें man findऔर man grepअधिक जानकारी के लिए।


3
यदि <filename>वाइल्डकार्ड शामिल हैं, तो इसके आसपास के उद्धरणों का उपयोग करें, जैसे find . -name '*.txt'
गिलेस एसओ- बुराई को रोकना '

@ गिल्स, मेरे जवाब को अपडेट करके कहा कि, धन्यवाद।
मिकेल

2
<filename>Userinput के लिए मार्कर के रूप में उपयोग करना कमांड-लाइन वातावरण में एक बुरी आदत है, जहां < and >अधिकांश समय का विशिष्ट अर्थ होता है। मैं सुझाव देता हूं कि इसका उपयोग filenameकरने के लिए सिर्फ FILENAME का उपयोग करें । ज्यादातर लोग समझेंगे, और वे, जो नहीं करेंगे, नुकसान हो सकता है जब यह न समझें कि वे कम-से-कम या अधिक-से-अधिक संकेत नहीं मारना चाहिए।
उपयोगकर्ता अज्ञात

2
<filename>बहुत सारे यूनिक्स दस्तावेज में एक सम्मेलन है, इसलिए मुझे लगता है कि लोगों के लिए इसके बारे में जागरूक होना उपयोगी है, लेकिन मैं मानता हूं FILENAMEकि इसे समझना आसान हो सकता है।
मिकेल

1
find -iname <filename>यह बेहतर है क्योंकि यह केस-असंवेदनशील है जैसे डॉस
एगेल कुरियन

8

कुछ गोले अनुमति देते हैं ls **/filename, जो काफी सुविधाजनक है।


1
अच्छी बात। बैश के हाल के संस्करणों में, रनिंग shopt -s globstar; echo **/filenameके बराबर है find . -name "filename"। यह zsh में भी काम करता है।
मिकेल

यह 'ls ** / फ़ाइल नाम' ठीक है, लेकिन लगता है कि अधिक नहीं है कि एक निर्देशिका स्तर गहरा है।
शोपाजो डे एरियेरेज़

@ sopalajo-de-arrierez यदि आप करते हैं shopt -s globstar, तो यह संभवतः आपके लिए काम करेगा। पुनरावर्ती ग्लोबिंग एक ऐसी विशेषता है जो केवल कुछ गोले में उपलब्ध है, और कभी-कभी, यह डिफ़ॉल्ट रूप से नहीं होता है।
शॉन जे। गोफ

ऑप्स ... मुझे अब समझ में आया, @ ShawnJ.Goff: shoptकमांड विकल्प को सक्षम करता है globstar on। अब यह एक आकर्षण की तरह काम करता है। बहुत बहुत धन्यवाद।
सूपालाजो डे एरियेरेज़

4

आप इसके साथ कर सकते हैं

find . | egrep filename

1
तुम भी साथ में यह कर सकता है find . -regextype posix-egrep -regex '.*filename.*'(अगर मैं नहीं जानता कि egrepहिस्सा महत्वपूर्ण है, लेकिन आप इस्तेमाल egrepअपने जवाब में तो मैं यह शामिल है)
माइकल Mrozek

आप कर सकते हैं, लेकिन grep समकक्ष DOS कमांड से अलग है। grepनियमित अभिव्यक्ति का उपयोग करता है, जबकि डॉस कमांड शेल वाइल्डकार्ड का उपयोग करता है।
मिकेल

1
यह सोचने के लिए आइए, शेल ग्लब्स भी डॉस वाइल्डकार्ड्स से अलग हैं। उदाहरण के लिए, find . -name "*.*"DOS पृष्ठभूमि से आप वह नहीं करेंगे जो आप करना चाहते हैं। दस्ताने पहचानने के लिए पर्याप्त करीब हैं, हालांकि, जबकि रेक्सक्स एक पूरी तरह से नया जानवर हैं।
जंदर

*.*.*आधुनिक डॉस अर्थात विंडोज़ सीएमडी में क्या करता है? किस बारे में *.*.*.*?
ctrl-alt-delor

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