UNIX "ढूंढें" कमांड, मैच शाब्दिक "डॉट"


1

मुझे ".pdf" या ".png" के साथ समाप्त होने वाली फ़ाइलों की आवश्यकता है; यहाँ मेरा प्रयास है:

find /Users/robottinosino/Desktop/_PublishMe_ -type f -regex '.*[pdf|png]'

इसमें गलत तरीके से "Apdf", "Zpdf", आदि के साथ समाप्त होने वाली फाइलें शामिल हैं (फ़ाइल एक्सटेंशन से पहले शाब्दिक डॉट गायब)

मैंने पैटर्न को इसमें समायोजित करने की कोशिश की:

find /Users/robottinosino/Desktop/_PublishMe_ -type f -regex '.*\.[pdf|png]'

लेकिन फिर कोई परिणाम नहीं लौटाए जाते हैं। बचकर भागना। बैकस्लैश के साथ काम नहीं करता है। क्यों?

[०] $ अनाम-ए

Darwin Robottinosino.local 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun  7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386

धन्यवाद!


उह। दुखी आदमी। :(
रोबॉटीनोसिनो

जवाबों:


3

समस्या डॉट नहीं है। यह कोष्ठक है। वर्ग कोष्ठक एक वर्ण वर्ग को परिभाषित करते हैं; मुझे पूरा यकीन है कि आप जो करने की कोशिश कर रहे हैं वह एक वैकल्पिक समूह है। उसके लिए, आपको गोल कोष्ठक की आवश्यकता है। आपको उसके लिए विस्तारित नियमित अभिव्यक्ति का उपयोग करने की आवश्यकता है, और इसलिए कमांड है:

find -E /Users/robottinosino/Desktop/_PublishMe_ -type f -regex '.*\.(pdf|png)'

यह -Eझंडा एक BSDism (OS X है जिसमें काफी हद तक BSD-ish यूजरलैंड है)। GNU पर, आप -regextype posix-extendedएक झंडे के बजाय एक अभिव्यक्ति के रूप में कहते हैं , ( डेनिस विलियमसन की टिप्पणी के अनुसार , जो निस्संदेह सही है)।


उत्सुकता से, दूसरा एक आकर्षण की तरह काम करता है, लेकिन 1 नहीं करता है? "-ई" के बिना एक? क्या गलत है?
रोबॉटीनोसिनो

मुझे लगता है कि अगर मैं -ई के साथ आधुनिक आरईएस को चालू नहीं करता हूं, तो इस वजह से कमांड विफल हो जाती है: अप्रचलित (`` बुनियादी '') नियमित अभिव्यक्तियाँ कई मामलों में भिन्न होती हैं। `| ' एक साधारण चरित्र है और इसकी कार्यक्षमता के लिए कोई समकक्ष नहीं है। (रेफ: आदमी OSX पर re_format)
रोबॉटीनोसिनो

आह, आपको उस पर गुमराह करने के लिए खेद है। मैंने स्थानीय रूप से उस कमांड के संबंधित संस्करण की कोशिश की, लेकिन बिना |, इसलिए मैंने उसे नहीं पकड़ा। मेरी गलती। मैं उस सुझाव को हटा दूंगा।
टॉम एंडरसन

5

\( -name '*.pdf' -or -name '*.png' \)जब तक आपके पास regex के साथ मेल खाने का कोई अन्य कारण न हो, आप इसके बजाय कुछ का उपयोग कर सकते हैं ।


मुझे एक बार में या तो एक्सटेंशन के साथ फ़ाइलों का मिलान करना होगा ..
Robottinosino

जो है उसके लिए -orहै।
मिलिमोस

मैं के बारे में पता नहीं था, मुझे सिखाने के लिए धन्यवाद।
रोबॉटीनोसिनो

2

पैटर्न वर्ग कोष्ठक (पाइप सहित) के भीतर [pdf|png]किसी भी एक अक्षर से मेल खाता है ।

इसे इस्तेमाल करे:

find /Users/robottinosino/Desktop/_PublishMe_ -type f -regex '.*\.\(pdf\|png\)'

हाय डेनिस। जवाब के लिए धन्यवाद। यह काम नहीं करता है ... लेकिन अगर मैं "-ई" उपसर्ग करता हूं और फिर "-regex '*। * \ _? (पीडीएफ। पीएनजी)' करता है ... तो आप पाइप से क्यों बच गए? क्या यह अलग व्यवहार है? मंच के लिए?
Robottinosino

@Robottinosino: findमेरे सिस्टम पर (ढूँढें (GNU findutils) 4.4.2) नहीं है -E। इसमें कोष्ठक और पाइप से बचने के बिना काम करता है -regextype posix-egrepऔर -regextype posix-extended(भी posix-awk) है।
डेनिस विलियमसन

मैंने फिर भी आपको आभार व्यक्त किया! ;) [मैंने निर्दिष्ट किया कि मैं मूल प्रश्न में OSX पर था ...]
Robottinosino

@Robottinosino: क्षमा करें, मैं osx टैग को नोटिस करने में विफल रहा ।
डेनिस विलियमसन

यदि आप OS X से परिचित नहीं हैं, तो टैग एकमात्र संकेत है जो कि प्लेटफ़ॉर्म है, लेकिन यदि आप हैं, तो /Users/...मैक चिल्लाता है।
टॉम एंडरसन

0
find /Users/robottinosino/Desktop/_PublishMe_ -type f -regex '.*\.[pdf|png]'

0

आप का उपयोग किया जाना चाहिए -name *.pdfऔर नहीं .*[pdf|png]
आपका रेगेक्स मैच करेगा .Apdf, .Zpngआदि।

आप यह कोशिश कर सकते हैं:
find . -type f | egrep '.pdf$|.png$'


ओपी ने पहले से ही पहली गलती पर ध्यान दिया, समस्या उनके दूसरे प्रयास में है।
मिलिम्मोस

0

यह उपयुक्त होना चाहिए:

find /Users/robottinosino/Desktop/_PublishMe_ -type f -regextype posix-egrep -regex '.*\.(pdf|png)'

यदि आपके संस्करण के findबारे में नहीं पता है -regextype posix-egrep, तो आप इसके बजाय यह कोशिश कर सकते हैं:

find /Users/robottinosino/Desktop/_PublishMe_ -type f '.*\.\(pdf\|png\)'

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