मैक OSX टर्मिनल में फ़ाइल नाम से मुझे फ़ाइल कैसे मिलेगी?


118

मैं फ़ाइल नाम के साथ अपनी मैकबुक पर एक फ़ाइल ढूंढना चाहता हूं abc.dmg:। मैंने स्पॉटलाइट का उपयोग करने की कोशिश की है, लेकिन यह नहीं मिला। जब मैंने खोजने की कोशिश की, और उपयोग किया: find -name abc.dmg -path /मुझे त्रुटियां वापस मिल गईं।

मैक OSX टर्मिनल पर फाइंड कमांड के साथ फ़ाइलनाम द्वारा फ़ाइल खोजने के लिए उचित सिंटैक्स क्या है?


1
@VxJasonxV Apple प्रश्न सुपर यूजर के लिए विषय पर 100% हैं, और प्रत्येक Apple प्रश्न को वहां ले जाने की कोई वास्तविक आवश्यकता नहीं है। iPhone या iPad के सवाल हालांकि / जब आवश्यक हो तो ले जाया जाएगा।
बाइनरीमिसिट

यह ऑफ-टॉपिक होने का इतना कारण नहीं था, लेकिन यह तथ्य कि इस सामान्य विषय के लिए अधिक विशिष्ट विषय / साइट है।
VxJasonxV

@Diago: मेटा या चैट पर इस बारे में कोई चर्चा हुई है? सिर्फ इसलिए क्योंकि AFAIK apple.SE जल्द ही बीटा आउट से लॉन्च होने वाली है, इसलिए सभी को एक ही पेज पर लाना अच्छा होगा।
रॉबर्ट एस सियासीओ

1
@calavera। काफी पुरानी चर्चा लेकिन प्रासंगिक यहाँ पाया जा सकता है । Apple SE, Ubuntu SE और Linux SE सभी सुपर यूजर की तारीफ करने के लिए है, लेकिन किसी भी तरह से हम उपयोगकर्ताओं को स्थानांतरित करने के लिए मजबूर नहीं करना चाहते हैं। मैं अपने Apple प्रश्न यहाँ, बल्कि Apple पूछना पसंद करता हूँ, क्योंकि मैं 3 अलग ऑपरेटिंग सिस्टम का उपयोग करता हूँ। यदि मेरे पास एक बहुत विशिष्ट प्रश्न है, तो मैं इसे एक अधिक विशिष्ट साइट पर पूछूंगा।
बाइनरीमिसिट

जवाबों:


163

अपने सरलतम रूप में, findएक पैरामीटर लेता है: पथ। अपने वास्तव में उपयोगी रूप में, यह मार्ग का अनुसरण करता है जो मानदंड को सीमित करता है।

इस प्रकार, आप चाहते हैं:

  • find (कार्यक्रम)
  • / (पथ), और
  • -name abc.dmg (मानदंड)।
find / -name abc.dmg

12
संपूर्ण ड्राइव को खोजते समय आपको अनुमति से वंचित प्रकार की त्रुटियां हो सकती हैं लेकिन उन्हें अनदेखा किया जा सकता है जब तक कि आप फ़ाइल को एक प्रतिबंधित फ़ोल्डर में होने की उम्मीद न करें। यदि ऐसा है तो sudo find /name abc.dmg का उपयोग करें
Chris Nava

कोशिश की, लेकिन कोई नतीजा नहीं निकला।
SPRBRN

6
संभवत: तब, आपके पास आपके कंप्यूटर पर abc.dmg नामक फ़ाइल नहीं है। खोज मामले को असंवेदनशील बनाने के लिए आप -name के बजाय -iname का उपयोग कर सकते हैं। मुझे अत्यधिक संदेह है कि आप वास्तव में "abc.dmg" की खोज कर रहे हैं, और उस (संभवतः) तथ्य को देखते हुए, आपको यह बताना कठिन है कि वास्तविक विवरण के बिना आपका मुद्दा क्या है।
VxJasonxV

2
@rxt: अगर यह नहीं मिल रहा है, यह नहीं है ...
रॉबर्ट एस Ciaccio

5
यह देखते हुए कि ओपी रिपोर्ट ने प्रश्न पाठ में खोजने की कोशिश की है, यह ध्यान देने योग्य है कि find मामलों के लिए तर्कों का क्रम । यदि होना चाहिए find [path]+ [selection, grouping, and actions]
dmckee

23

find . -name '*.csv'उदाहरण के लिए मेरे लिए वाइल्डकार्ड के साथ काम किया। ओपी find . -name '*.dmg'अपने वर्तमान निर्देशिका की जांच करने के लिए भी इस्तेमाल कर सकता है , यह मानते हुए कि वह अंदर था /



6

आप locateकमांड का उपयोग कर सकते हैं ।

locate abc.dmg

2
osxटैग नोट करें । सुस्त db डिफ़ॉल्ट रूप से पॉप्युलेट नहीं होता है।
VxJasonxV

डेटाबेस बनाने के बाद इसकी कोशिश की, लेकिन कोई नतीजा नहीं निकला।
एसपीआरबीआरएन 18

यदि locateऔर mdfindदोनों विफल होते हैं, तो संभावना है कि फ़ाइल आपके मशीन पर नहीं है। या इसका नाम नहीं है कि आप इसका नाम कैसे सोचते हैं। शायद सभी DMG के लिए खोज करना आपका अगला कदम हो सकता है?
छिलका

3

सबसे सरल तरीका (जो मुझे यकीन है कि आप पहले से ही कोशिश कर चुके हैं, लेकिन हे, मुझे इसे वैसे भी जोड़ने दें) किसी भी खोजक विंडो के शीर्ष दाईं ओर खोज बॉक्स में abc.dmg दर्ज करना है, फिर "फ़ाइल का चयन करें नाम "खोज बार पर दिखाई देने वाले विकल्पों में से"।

टर्मिनल के लिए कोई ज़रूरत नहीं है।

यह भी याद रखें कि स्पॉटलाइट कंट्रोल पैनल और abc.dmg में निर्दिष्ट स्पॉटलाइट निर्देशिका केवल उन निर्देशिकाओं में से एक में नहीं हो सकती हैं।

मुझे सही है अगर मैं गलत हूँ, लेकिन मुझे लगता है कि खोज कमांड को पता होना चाहिए कि आउटपुट क्या है:

find / -name abc.dmg -print

... टर्मिनल को किसी भी परिणाम को प्रिंट करना चाहिए (अनुमति त्रुटियों सहित)।

यदि आप अनुमति त्रुटियां नहीं चाहते हैं और अन्य उपयोगकर्ता निर्देशिकाएं खोजना चाहते हैं:

sudo find / -name abc.dmg -print

2

आप प्रासंगिक फ़ाइल को जल्दी खोजने और खोलने के लिए कमांड लाइन फ़ंक्शन का उपयोग कर सकते हैं। मुझे स्पॉटलाइट विंडो में क्वेरी की लंबी स्ट्रिंग टाइप करने से यह आसान लगता है।

में निम्नलिखित कार्य जोड़ें ~/.bash_aliases

# find any item matching search query in file name
spot(){
  mdfind "kMDItemDisplayName=='*$1*'cd";
}

# restrict to files under (recursive) a specific path 
findpaper(){
    mdfind -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'cd";
}

# default to open the first entry unless 2nd positional argument is given
openpaper(){
    FILEID=$(printf "%sp" ${2:-1})

    open "$(mdfind -name -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'cd" | sed -n "${FILEID}")"

}

अब, या तो source ~/.bash_aliasesएक नया टर्मिनल लोड फ़ंक्शन खोलें। फ़ाइल नाम में कहीं भी शब्द, पाई और 2016 के साथ फ़ाइलों की खोज करने के लिए, करें

spot pie*2016 #or
spot 2016*pie

*खोज पैटर्न के रूप में आपकी क्वेरी को प्रस्तुत करने या संलग्न करने की कोई आवश्यकता नहीं है , '*$1*'पहले से ही आपकी क्वेरी की शुरुआत और अंत में वाइल्ड कार्ड प्रविष्टि को टैग करता है। अतिरिक्त cdमामले के लिए असंवेदनशील है fredऔर उदासीन चिह्नों की अनदेखी करते हुए, उदाहरण के लिए , फ्रैडरिक और फ्रैडरिक दोनों को वापस कर देगा।

findpaperखोज को एक विशिष्ट पथ (पुनरावर्ती) के तहत परिणामों तक सीमित कर देगा, जबकि openpaper pie*201(या कई परिणामों में से पहला) खोज परिणाम openpaper pie*201 3खोलेगा या दूसरी प्रविष्टि प्रविष्टि खोलेगा। बैश स्क्रिप्ट या अन्य गैर-दस्तावेज़ फ़ाइलों को खोलने से बचने के लिए, आप अतिरिक्त खोज विशेषताओं द्वारा फ़ाइल सामग्री को प्रतिबंधित कर सकते हैं। देखें फ़ाइल मेटाडाटा क्वेरी अभिव्यक्ति सिंटैक्स और https://ss64.com/osx/mdfind.html अन्य खोज ऑपरेटर का उपयोग करने के लिए।


बहुत बढ़िया! इसे
भरना

0

/ से रूट के रूप में अपनी डिस्क पर हर फ़ाइल की एक सूची पर कब्जा

sudo find / &> ~/file-list.txt
sudo chown $(whoami) ~/file-list.txt

पूरी ड्राइव को खोजने के लिए grep के माध्यम से पूरी फ़ाइल को कैट:

cat ~/file-list.txt | grep abc.dmg

केवल .jpg और .dmg फ़ाइलें दिखाने के लिए नियमित अभिव्यक्तियों का उपयोग करें:

cat ~/file-list.txt | grep -E "(\.dmg|\.jpg)"

नतीजा:

Applications/Visualisations/CurvedSpaces-forMac.app/Contents/Resources/Textures/paper.jpg

...आदि। दुर्भाग्य से सभी माउंटेड डिस्क को उन टाइम मशीन से बेदखल करने के लिए वे सबसे अच्छे लिंक पर कब्जा कर लेंगे, जिनके पास बहुत सारे लिंक हैं। तो एक अन्य विंडो में मैं चलाता हूं watch tail -n 10 ~/file-list.txtजो मुझे दिखाता है कि यह मेरे नृशंस हैक में कहां है!


1
कुछ टिप्पणियों के लायक खराब व्यवहार या चीजें: (1) sudo find / > ~/file-list.txtपूरे शेल को जड़ के रूप में चलाने से बेहतर लगता है। (2) find *छिपी (डॉट) ऑब्जेक्ट (यदि कोई हो ) को छोड़ देगा /। (३) &>बैशवाद है। (४) बेकार उपयोग cat। (5) grep abc.dmgजैसे प्रिंट होगा /foo/bar/123abcXdmg456/baz/whatever। // एक अच्छी बात यह है कि आपका उत्तर इस थ्रेड को लाता है (और अन्य उत्तर नहीं है) वह तरीका है जहां उपयोगकर्ता findएक बार चलता है और फिर बार-बार फाइलसिस्टम (ओं) को क्वेरी किए बिना सहेजे गए परिणाम को कई बार पुन: उपयोग करता है। यह संभावित लाभ हालांकि उच्चारण नहीं है।
कामिल मैकियोरोव्स्की

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