perl

2012-09-05 20 views
13

में फ़ाइल के सटीक पूर्ण पथ को कैसे प्राप्त करें मेरे पास केवल एक फ़ाइल नाम है जो myfile.txt है और मुझे यकीन नहीं है कि यह कहां से सहेजा गया है। मैं सटीक पूर्ण पथ कैसे प्राप्त कर सकता हूं जहां फ़ाइल संग्रहीत की जाती है। मैं कोशिश की हैperl

$string=`ls /abc/def/*/*/*/*/myfile.txt`; 

परिणाम: पूर्ण पथ /abc/def/ghi/jkl/mno/pqr/myfile.txt

है मैं shell command चल ऊपर पर्ल स्क्रिप्ट का उपयोग करके पूरा पथ प्राप्त करने में सक्षम। हालांकि, पथ को वापस करने में बहुत लंबा समय लगा। क्या पर्ल का उपयोग करके फ़ाइल का पूरा पथ ढूंढने का कोई तरीका है?

+0

कृपया "पूर्ण पथ" को परिभाषित करें। एक फ़ाइल में एक से अधिक हो सकता है। इसमें सिम्लिंक शामिल हो सकते हैं? – reinierpost

उत्तर

16

ठीक है, अगर myfile.txt वास्तव में उस फाइल करने के लिए एक रिश्तेदार पथ है, वहाँ उस के लिए एक कोर मॉड्यूल उप है - File::Spec->rel2abs():

use File::Spec; 
    ... 
    my $rel_path = 'myfile.txt'; 
    my $abs_path = File::Spec->rel2abs($rel_path) ; 

... और आप वास्तव में उस फ़ाइल के लिए अपनी निर्देशिका के माध्यम से खोज करने के लिए की जरूरत है , फ़ाइल :: खोजें ... लेकिन मैं संभवतः शेल find/-name myfile.txt -print कमांड के साथ जाऊंगा।

+0

हाय Rainna.I, मुझे खेद है कि यह सापेक्ष पथ नहीं है। मैंने कोड से ऊपर की कोशिश की और परिणाम वापसी मेरा <निष्पादन पथ> /myfile.txt – Steven

+0

@ स्टीवन हां होगा, क्योंकि 'rel2abs' वास्तव में कोशिश नहीं करता है उस फाइल को देखो। मैंने जो 'find' कमांड दिया है उसका उपयोग करने के बारे में कैसे? या शायद आपको सख्ती से पर्लिश समाधान की आवश्यकता है?) फिर फ़ाइल :: जाने का रास्ता खोजें। – raina77ow

12

इसे पूरा करने के लिए आपको पर्ल मॉड्यूल Cwd का उपयोग करना चाहिए। लिंक में एक उदाहरण भी नीचे देखा गया है।

#!/usr/bin/perl 
use Cwd; 
my $dir = getcwd; 
use Cwd 'abs_path'; 
my $abs_path = abs_path($file); 
+3

यह एक पूर्ण पथ उत्पन्न करता है, लेकिन इसमें अभी भी सिम्लिंक हो सकते हैं; जैसे आप उस पथ के साथ समाप्त नहीं हो सकते हैं जो फाइल सिस्टम के मूल बिंदु बिंदु से इंगित करता है। – reinierpost

4

हम सिस्टम पर कहीं से भी देख सकते हैं, लेकिन इस मामले में हम "/ abc/def" फ़ोल्डर से देख रहे हैं।

$start_path = "/abc/def/"; 
@files = <$start_path*/myfile.txt> 

foreach $file(@files) { 
    print $file; # prints full path of file. 
} 

मुझे पता है कि पोस्ट एक साल पहले बनाया गया था, लेकिन कुछ अभी भी इस सवाल को देख सकते हैं।

 संबंधित मुद्दे