लिनक्स में पीडीएफ फाइलों का पता लगाने के लिए कमांड


11

मेरा लक्ष्य दूरस्थ मशीन पर सभी पीडीएफ़ फ़ाइलों को ढूंढना है, इसलिए मैं उपयोगी कमांड का सहारा लेता हूं find। इसलिए मैं टाइप करता हूं

~ ~ .pdf खोजें
या
~ ~ * .pdf खोजें
और मुझे कुछ नहीं मिलता। मैं अपनी मशीन पर ऐसा ही करता हूं और मुझे कुछ नहीं मिलता है। मैं अपनी मशीन पर मेनू से एक नियमित खोज करता हूं और मुझे काफी कुछ पीडीएफ फाइलें मिलती हैं। क्या कोई मुझे बताएगा कि मैं क्या गलत कर रहा हूं?


11
यदि आप एक अच्छी प्रतिक्रिया चाहते हैं तो अपने प्रश्न के बाहर अपनी नकारात्मक राय रखें। संबंधित कहानी में, findबेकार से दूर है।
विल्हेमटेल

8
निःसंदेह आपको स्वतंत्र भाषण का अधिकार है। लेकिन आप एक अच्छी प्रतिक्रिया चाहते हैं, है ना? नहीं, आपके पास एक अच्छी रचनात्मक प्रतिक्रिया का अधिकार नहीं है । यह एक विशेषाधिकार है।
विल्हेमटेल

2
एक अकुशल कारीगर हमेशा अपने उपकरणों को दोष देता है। दूसरे शब्दों में, शुद्ध PBCAK यहाँ।
पास्कल थिवेंट

5
@Wilhelmtell, मुझे लगता है कि मार्टिन का कथन उचित है - कमांड को पहले स्थान पर "खोज" नाम नहीं दिया जाना चाहिए, "walkpath_and_execute" की तरह अधिक ... यह सबसे सहज या उपयोगकर्ता के अनुकूल इंटरफेस नहीं है और अधिक करता है बस फ़ाइलों को खोजने की तुलना में। सरल नाम "खोज" इसमें धोखा है कि यह एक सरल इंटरफ़ेस का सुझाव देता है जो इसके पास नहीं है। निश्चित रूप से, पता बेकार से दूर है और काफी अच्छी तरह से काम करता है, लेकिन "खोज", "पता लगाने", "कौन सा", आदि के बीच के अंतर को न जानने के लिए एक शुरुआत को दोष दे सकता है
माइकल आरोन सफ़्यान

1
@ मिचेल मैंने यहाँ किसी को दोषी नहीं ठहराया; या, बल्कि, मैं यहाँ दोष नहीं दे रहा था। मैंने यह भी नहीं कहा findकि सहज ज्ञान युक्त है। मैं हालांकि एक अच्छे स्वर में एक ही बात कह सकता हूं; कभी-कभी मैं (मूर्खतापूर्ण) नकारात्मक टिप्पणियों पर प्रतिक्रिया करता हूं।
विल्हेमटेल

जवाबों:


30

findबेकार से दूर है। आप इसे ठीक से उपयोग नहीं कर रहे हैं।

प्रयत्न:

find . -type f -iname '*.pdf'


@ मर्टिन - मदद करने के लिए खुश, बस इस सवाल के जवाब के रूप में चिह्नित करना सुनिश्चित करें!
मिच डेम्पसे

@stepancheg हाँ, आप इंटरनेट क्यों नहीं लेते और एक हार्ड कॉपी प्रिंट करते हैं।
बोब्बोबो

9

खोज के लिए प्रलेखन पर एक नज़र डालेंfindआदेश एक अविश्वसनीय रूप से शक्तिशाली एक है, परिणामस्वरूप, कुछ हद तक एक जटिल इंटरफ़ेस है। आप वह कर सकते हैं जो आप चाहते हैं:

find . -type f -iname '*.pdf' 

ऊपर दिए गए कमांड का अर्थ है "किसी केस असंवेदनशील नाम से मेल खाते * .pdf (और ऐसे मैचों के नाम को प्रिंट करें) के साथ टाइप फ़ाइल की प्रविष्टियों के लिए"। खोज कमांड वास्तव में उन फाइलों पर कमांड को निष्पादित करने के लिए इस्तेमाल किया जा सकता है जो (फ़ाइल नामों को प्रिंट करने के अलावा या इसके बजाय) पाई जाती हैं। अपने उद्देश्यों के लिए है, हालांकि, आप अपने आप को के साथ अधिक सहज मिल सकता है पता लगाने मानते हुए कि आपके बनाया है का उपयोग कर डेटाबेस का पता लगाने - आदेश है, जो updatedb - यह बहुत आसान बना देता है फ़ाइलें खोजने के लिए। उदाहरण के लिए:

locate '*.pdf'

आप यह भी पाएंगे कि फाइंड कमांड आमतौर पर फाइंड कमांड की तुलना में तेज होती है, क्योंकि फाइंडनेम (इंडेक्स डेटाबेस) के इंडेक्स का उपयोग करते हुए पता चलता है, जबकि यह खोज प्रत्येक इनवोकेशन के लिए पदानुक्रम को चलाएगी।


6

आप बस उस विधेय को याद कर रहे हैं जो कहता है कि आप क्या खोज रहे हैं (जैसे -name।)

नाम से घर निर्देशिका में खोजने के लिए:

find ~ -name \*.pdf

ध्यान दें कि वाइल्डकार्ड *को बचाना होगा ताकि शेल उस पर अपना हाथ लगाने से पहले उसकी व्याख्या न करे। उपयोग करना '*.pdf'और "*.pdf"जैसा प्रभाव होगा वैसा ही होगा \*.pdf

केस-असंवेदनशील खोजने के लिए:

find ~ -iname \*.pdf

परिणामों को केवल फाइलों तक पहुंचाने के लिए (नाम की अभिव्यक्ति संभवतः आपके लिए इस बात का ध्यान रखेगी, लेकिन अगर आपके पास कोई अजीब नाम वाली निर्देशिका है):

find ~ -type f -iname \*.pdf

यह सुनिश्चित करने के लिए कि प्रतीकात्मक लिंक निम्न प्रकार हैं (मैं आमतौर पर खोज करते समय स्वयं ऐसा करना चाहता हूं):

find ~ -follow -type f -iname \*.pdf

आपके द्वारा पाई गई फ़ाइलों के साथ कुछ करने के लिए: आप इसे stdout पुनर्निर्देशन (जैसे > filenameअंत में सौदा) का उपयोग करके किसी फ़ाइल में डंप कर सकते हैं , या -execकमांड चलाने के लिए विकल्प का उपयोग कर सकते हैं (विवरण के लिए मैन पेज देखें)। उत्तरार्द्ध एक समय में प्रत्येक फ़ाइल पर एक कमांड चलाता है, हालांकि। xargsएक बार में एक बार या बड़ी मात्रा में सभी आदेशों को कमांड के रूप में अपनी मिली फाइलों को किसी अन्य कमांड को पास करने देने के लिए यह तेजी से होता है । उदाहरण के लिए, हेडर फ़ाइलों के माध्यम से तदर्थ (लेकिन अनइंडेक्सिड) ग्रीप्स के लिए:

find ~ -follow -type f -name \*.h | xargs grep -nH "identifier"

और एक अंतिम विस्तार, उस अंतिम कमांड को ठीक से काम करने के लिए यदि आपके पास उनके साथ रिक्त स्थान वाली फाइलें और निर्देशिकाएं हैं:

find ~ -follow -type f -name \*.h -print0 | xargs -0 grep -nH "identifier"

वास्तव में, "* .pdf" का विस्तार होगा यदि वर्तमान निर्देशिका में फाइलें .pdf के साथ समाप्त हो रही हैं, ठीक है? (माइनर नोट)
पीटर जरिक

1
बैश में नहीं। बैश मैनुअल से: "दोहरे उद्धरणों में वर्णों को शामिल करना उद्धरण के भीतर [अक्षर], [backquote], [पाइप] और, जब इतिहास विस्तार सक्षम है, [धमाका], सभी पात्रों के शाब्दिक मूल्य को संरक्षित करता है। " यह पुष्टि करने के लिए अपने आप को आज़माएं: एक निर्देशिका में ls "* .txt"। इसमें टेक्स्ट फाइल के साथ।
ओवेन एस।

हां, आप सही हैं, बिल्कुल। मुझे नहीं पता कि मुझे वह विचार कहां से मिला। मुझे सही करने के लिए धन्यवाद।
पीटर जारिक


0

मैं जैसे grep के साथ खोज को मिलाता था

खोजो। | grep -i ".pdf"

शायद शीर्ष कुशल नहीं है, लेकिन यह काम ठीक करता है।


इस में किया जा सकता है findसीधे यदि आप के माध्यम से कामना की, -iregex: find ~ -iregex '.*\.pdf'। समस्या यह है findकि पैटर्न में ऐसा व्यवहार किया जाता है जैसे कि यह हमेशा ^आगे और $पीछे होता है, इसलिए आपके पैटर्न को थोड़ा और अधिक जटिल होना चाहिए। यह भी ध्यान दें: कि .आपके पैटर्न में वास्तव में एक एकल-वर्ण वाइल्डकार्ड है, न कि शाब्दिक अवधि।
ओवेन एस।

0

उन फ़ाइलों को ढूंढें जिन्हें आपको अंतिम x दिनों के भीतर डाउनलोड करने की आवश्यकता है

find ~ -type f -iname '*.pdf' -mtime -1

आपको ऊपरी और निचले मामले (यानी में ) की परवाह किए बिना ~एक्सटेंशन के साथ और नीचे अपने घर निर्देशिका में पीडीएफ फाइलें .pdfमिलेंगी inameऔर 1 दिन पहले तक संशोधित किया गया है क्योंकि मैंने जोड़ा है mtime -1; यदि आप m60 में -60 डालते हैं तो यह अंतिम 60 दिन होगा।


0

"पाया" फ़ाइलों के भीतर एक खोज निष्पादित करने के लिए यह निर्माण है:

find <dir> -type f -iname <name> -exec grep -H <string> {} \;

निष्पादित कमांड को बच के समाप्त होना चाहिए ";" और -H की जरूरत है grep के लिए फाइल के अंदर लाइन के अलावा फाइल पथ को प्रिंट करने के लिए जहां "स्ट्रिंग" है।

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