लिनक्स दिए गए स्ट्रिंग के साथ फ़ाइल नाम ढूंढता है


107

मैं उबंटू पर हूं, और मैं वर्तमान निर्देशिका और उपनिर्देशिकाओं में सभी फाइलें ढूंढना चाहता हूं जिनके नाम में स्ट्रिंग "जॉन" है। मुझे पता है कि grepफ़ाइलों में सामग्री का मिलान हो सकता है, लेकिन मुझे पता नहीं है कि इसे फ़ाइल नामों के साथ कैसे उपयोग किया जाए। किसी भी सहायता की सराहना की जाएगी।


जवाबों:


195

खोज आदेश का उपयोग करें ,

find . -type f -name "*John*"

1
एक कस्टम बैश स्क्रिप्ट बनाने के साथ #!/bin/bash if [ -z $1 ]; then echo "Error: Specify pattern for search"; else /usr/bin/find . -type f -name "*$1*"; fi आप F search-stringएक पूर्ण शॉर्टकट के रूप में चल सकते हैं
Ilia Rostovtsev

@IliaRostovtsev - अच्छा है, लेकिन [ -z "$1" ]थोड़ा बेहतर होगा।
जो

@ जो आह, सही है। आप मामले में एक रास्ता रिक्त स्थान है मतलब है? लेकिन यहाँ हम केवल $ 1 के अस्तित्व के लिए जाँच करते हैं $ 2 दिखाई देंगे और यही वह है। आपका मतलब है कि यह सैद्धांतिक रूप से बेहतर है, है ना?
इलिया रोस्तोवत्सेव

@IliaRostovtsev - वास्तव में, मैं गलत था। यदि $ 1 शून्य है तो परीक्षण बन जाता है if [ -z ]। मैंने सोचा था कि एक वाक्यविन्यास त्रुटि होगी, लेकिन यह काम करता है। मैं अभी से अपने कुछ कोड को सरल बना सकता हूं।
जो

25

एक सही उत्तर पहले ही आपूर्ति किया जा चुका है, लेकिन आपके लिए यह जानने के लिए कि मैं अपने आप को कैसे मदद कर सकता हूं मैंने सोचा था कि मैं कुछ अलग तरीके से मदद करूंगा; यदि आप एक शब्द में क्या हासिल करने की कोशिश कर रहे हैं, तो आप बता सकते हैं कि लिनक्स पर एक शक्तिशाली मदद की सुविधा है।

man -k <your search term>

जो कुछ भी करता है, वह सभी विवरणों को सूचीबद्ध करने के लिए होता है, जो संक्षिप्त विवरण में आपका खोज शब्द है। आम तौर पर एक बहुत अच्छा मौका है कि आप होगा कि लगता है कि तुम क्या करने के बाद कर रहे हैं। ;)

यह आउटपुट कभी-कभी कुछ हद तक भारी हो सकता है, और मैं इसे सभी उपलब्ध मैन-पेज के बजाय निष्पादन योग्य तक सीमित करने की सलाह दूंगा, जैसे:

man -k find | egrep '\(1\)'

या, यदि आप भी ऐसे आदेशों की तलाश करना चाहते हैं जिनके लिए उच्च विशेषाधिकार स्तर की आवश्यकता होती है, जैसे:

man -k find | egrep '\([18]\)'

3
मैं उत्सुक हूं ... एक सवाल जो खोज के माध्यम से हाथ में समस्या को हल करने का कोई प्रयास नहीं दिखाता है, एक वोट अप हो जाता है, एक अनुकूल विवरण कि कैसे संभव कमांड के बारे में पता लगाना है। मानदंड क्या हैं? :)
tink

1
मैंने तुम्हें उकसाया। सबक यह आदमी कर सकता है। लेकिन हम नमूने देख सकते हैं और अनुकूलित कर सकते हैं :)
tgkprog

2

findआदेश लंबा समय लग क्योंकि यह फाइल सिस्टम में असली फाइलों को स्कैन करता है जाएगा।

सबसे तेज़ तरीका locateकमांड का उपयोग कर रहा है , जो तुरंत परिणाम देगा:

locate "John"

यदि कमांड नहीं मिली है, तो आपको mlocateपैकेज स्थापित करने और चलाने की आवश्यकता हैupdatedb पहली बार खोज डेटाबेस तैयार करने के लिए कमांड ।

यहाँ और अधिक विवरण: https://medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab



1

यह treeउस निर्देशिका में कमांड का उपयोग करके एक बहुत ही सरल समाधान है जिसे आप खोजना चाहते हैं। -fपूर्ण फ़ाइल पथ दिखाता है और नाम में स्ट्रिंग युक्त फ़ाइल को खोजने के लिए |ट्री के आउटपुट को पाइप करने के लिए उपयोग किया जाता है ।grepfilename

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