'खोज' कमांड का उपयोग करके फ़ाइलों का पूर्ण पथ प्राप्त करें


26

क्या खोजे जा रहे फ़ाइल का पूर्ण पथ प्राप्त करने का कोई तरीका है?

उदाहरण के लिए:

find .. -name "filename"

यह मुझे जैसा भी परिणाम देता है ../filenameलेकिन मुझे पूरा रास्ता चाहिए।

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

धन्यवाद


जवाबों:


15

कुछ इस तरह की कोशिश करें:

find "$(cd ..; pwd)" -name "filename"

धन्यवाद, मैं अभी परीक्षण कर रहा था $(cd ..; pwd)। यहाँ यह ठीक काम करता है, लेकिन अगर मैं इसे एक टर्मिनल में अकेला करता हूं, तो मैं माता-पिता को प्राप्त नहीं कर सकता ... मुझे "बैश: <dir>: एक निर्देशिका है। और अगर $(cd ..; echo "something")मुझे मिलता है" तो मुझे कुछ मिलता है: नहीं। कमांड "
जोर्ज एफजी

क्या आपका मतलब एक अलग कमांड की तरह है? तो फिर तुम डॉलर साइन बाहर छोड़ने के लिए की आवश्यकता होगी:(cd ..; pwd)
में अनुसंधान की

धन्यवाद, यह बात थी। किसी भी संदर्भ में मुझे $ क्यों निकालना चाहिए, यह उपधारा को कैसे प्रभावित करता है?
जॉर्जी एफजी

1
हाँ का ( ... )अर्थ है एक सब-सब में निष्पादित करें, आउटपुट को stdout में लिखा जाता है। $( ... )"कमांड प्रतिस्थापन" के लिए खड़ा है। उत्तरार्द्ध का उपयोग किया जा सकता है जैसे कि यह एक चर विस्तार था।
स्क्रूटिनीज़र

/ -नाम "फ़ाइल नाम" ढूंढें
पैंथर

12

के -execविकल्प का उपयोग करके देखें find:

find .. -name "filename" -exec readlink -f {} \;

नोट: readlinkएक प्रतीकात्मक लिंक या विहित फ़ाइल नाम के मूल्य को प्रिंट करता है।


यह हर फाइल पर रीडिंक कॉल करेगा, इसलिए यह बहुत अप्रभावी होगा।
बेक

9

आप bashवर्तमान कार्य निर्देशिका के पूर्ण पथ को प्राप्त करने के लिए टिल्ड विस्तार का उपयोग कर सकते हैं , इस तरह findसे परिणामों के लिए निरपेक्ष मार्ग प्रिंट करता है:

find ~+ -type f -name "filename"

यदि इसे निष्पादित किया जाता है ~/Desktop, तो इसका विस्तार किया जाता है

find /home/yourusername/Desktop -type f -name "filename"

और प्रिंट परिणाम जैसे:

/home/yourusername/Desktop/filename

यदि आप वर्तमान कार्यशील निर्देशिका की मूल निर्देशिका के साथ इस दृष्टिकोण का उपयोग करना चाहते हैं, तो आपको cdकॉल करने से पहले इसकी आवश्यकता होगी find:

cd .. && find ~+ -type f -name "filename"


1

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


1

यह मेरे लिए काम करता है, लेकिन केवल पहली घटना को वापस करेगा।

realpath $(find . -type f -name filename -print -quit)

सभी घटनाओं के लिए पूर्ण पथ प्राप्त करने के लिए (जैसा कि सर्जी कोलोडियाज़नी द्वारा सुझाया गया है)

find . -type f -name filename | xargs realpath

पिछली टिप्पणी को हटा दिया, +1, अच्छा काम @Wyrmwood
सर्गी Kolodyazhnyy

1

पैरामीटर विस्तार के साथ अंतिम निर्देशिका घटक को निकालना ।

find "${PWD%/*}" -name 'filename'

बाद में उपयोग करने के लिए किसी अनुक्रमित सरणी से आउटपुट को बचाने के लिए आप मैपफाइल का उपयोग कैसे कर सकते हैं इसका एक उदाहरण ।

mapfile -t -d '' < <(find ${PWD%/*} -name 'filename' -print0)

(यदि कोई सरणी नाम निर्दिष्ट नहीं है, MAPFILE डिफ़ॉल्ट सरणी नाम होगा)।

for i in "${MAPFILE[@]}"; do
    echo "$((n++)) $i"
done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.