2008-10-29 13 views
188

के सापेक्ष पथ के साथ लिनक्स सीएलआई में रिकर्सली फाइलों की सूची this question के समान है, लेकिन मैं यूनिक्स में वर्तमान निर्देशिका से संबंधित पथ को शामिल करना चाहता हूं। यदि मैं निम्नलिखित करता हूं:मौजूदा निर्देशिका

ls -LR | grep .txt 

इसमें पूर्ण पथ शामिल नहीं हैं।

test1/file.txt 
test2/file1.txt 
test2/file2.txt 

ऊपर कोड प्राप्त होगा:

file.txt 
file1.txt 
file2.txt 

मैं इसे कैसे रास्तों वर्तमान निर्देशिका मानक यूनिक्स कमांड का उपयोग कर के सापेक्ष शामिल करने के लिए प्राप्त कर सकते हैं उदाहरण के लिए, मैं निम्नलिखित निर्देशिका संरचना है?

+3

यह दिखाता है कि इस सुविधा में एलएस गायब है। –

+0

यह शर्म की बात है कि इन सभी समाधानों को 'ढूंढ' या 'पेड़' की आवश्यकता होती है। मैं एक एंड्रॉइड डिवाइस में ssh'ing हूँ जहां मैं केवल 'एलएस' दिखाई देता हूं, और इनमें से कोई अन्य उपकरण नहीं:/ – Ponkadoodle

उत्तर

254

उपयोग करें:

find . -name \*.txt -print 

प्रणाली है कि जीएनयू को खोजने का उपयोग करें, सबसे जीएनयू/लिनक्स वितरण की तरह पर, आप प्रिंट बाहर छोड़ सकते हैं।

+8

... और उस मामले के लिए आप '।' –

+4

पूर्ण पथों के लिए, '$ $ (pwd) -name \ * का उपयोग करें। Txt' – Zags

+1

यदि पैटर्न में निर्देशिका नाम का हिस्सा है, तो' -name 'के बजाय '-path" * docs/*। Txt "' का उपयोग करना चाहिए। '-होल्हेनेम' '-पाथ' – dashesy

23

find आज़माएं। अपने उदाहरण

find . -name "*.txt"

आप क्या चाहते हैं आप के लिए देना चाहिए

find [start directory] -name [what to find]

तो: आप इसे आदमी पेज में वास्तव में देख सकते हैं, लेकिन यह इस तरह sorta है।

9

आप इसके बजाय इस्तेमाल कर सकते हैं:

find . -name '*.txt' 
4
DIR=your_path 
find $DIR | sed 's:""$DIR""::' 

'sed' मिटा देगा सब से 'your_path' 'लगता है' का परिणाम है। और आप 'डीआईआर' पथ के सापेक्ष प्राप्त करते हैं।

sub format_lines($) 
{ 
    my $refonlines = shift; 
    my @lines = @{$refonlines}; 
    my $tmppath = "-"; 

    foreach (@lines) 
    { 
     next if ($_ =~ /^\s+/); 
     if ($_ =~ /(^\w+(\/\w*)*):/) 
     { 
      $tmppath = $1 if defined $1;  
      next; 
     } 
     print "$tmppath/$_"; 
    } 
} 

sub main() 
{ 
     my @lines =(); 

    while (<>) 
    { 
     push (@lines, $_); 
    } 
    format_lines(\@lines); 
} 

main(); 

उपयोग::

ls -LR | perl format_ls-LR.pl 
+0

यह वही है जो मुझे चाहिए लेकिन यह अभी भी मेरे लिए पूरा रास्ता थूकता है? – v3nt

+1

एस्ट्रोफ़े का उपयोग न करें - ढूंढें/tmp | sed s: "/ tmp" :: | अधिक –

1

यहाँ एक पर्ल स्क्रिप्ट है आप अपने इच्छित फ़िल्टर को फ़िल्टर करने के लिए grep का उपयोग कर सकते हैं।


तो आदेश नहीं मिला है, आप इसे स्थापित कर सकते हैं:

# yum install tree -y 

आप डेबियन उपयोग कर रहे हैं: RHEL/CentOS और फेडोरा लिनक्स पर पेड़ आदेश स्थापित करने के लिए

प्रकार निम्न आदेश/उबंटू, मिंट लिनक्स प्रकार आपके टर्मिनल में निम्न आदेश:

$ sudo apt-get install tree -y 
+0

यह एक भयानक पर्ल कार्यक्रम है। यह संभवतः 2-3 गुना लंबा है, और इसकी जटिलता की तुलना में जटिल है। –

59

उपयोग tree, -f (पूर्ण पथ) और -i साथ (कोई खरोज लाइनों):

tree -if --noreport . 
tree -if --noreport directory/ 

+1

केवल फाइलों को सूचीबद्ध करने के लिए कोई सेटिंग, और फ़ोल्डर्स को बहिष्कृत करें? – thebugfinder

1

आप cre एक खोल समारोह खा लिया, उदा।अपने .zshrc या .bashrc में:

filepath() { 
    echo $PWD/$1 
} 

filepath2() { 
    for i in [email protected]; do 
     echo $PWD/$i 
    done 
} 

पहले एक ही है, स्पष्ट रूप से एकल फ़ाइलों पर काम करेगा।

4

खोजने आदेश का उपयोग कर वांछित फ़ाइलों की वास्तविक पूरा पथ फ़ाइल नाम पाने के लिए, लोक निर्माण विभाग के आदेश के साथ उपयोग करें:

find $(pwd) -name \*.txt -print 
1

से खोज शुरू करने के लिए अपने फाइल सिस्टम पर "फ़ाइल नाम" कहा जाता है फ़ाइल का पता लगाएं मूल निर्देश संहिता "/"। "फ़ाइल नाम"

find/-name "filename" 
1

आप को बचाने के लिये विवरण आपके उत्पादन में फ़ाइल आकार आदि जैसे ls साथ आते हैं तो यह काम करना चाहिए चाहते हैं।

sed "s|<OLDPATH>|<NEWPATH>|g" input_file > output_file 
0

आप इस
सबसे पहले की तरह इस कार्यक्षमता लागू कर सकते हैं, का उपयोग कर ls कमांड लक्षित निर्देशिका की ओर इशारा किया। बाद में खोज कमांड का उपयोग करके इसका परिणाम फ़िल्टर करें। अपने मामले, उससे लगता है जैसे - हमेशा फ़ाइल नाम एक शब्द के साथ शुरू होता है file***.txt

ls /some/path/here | find . -name 'file*.txt' (* represents some wild card search) 
5

यही काम कर देता है:

ls -R1 $PWD | while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done | grep -i ".txt"

लेकिन यह करता है कि द्वारा पार्स के साथ "पाप" ls, हालांकि, जिसे जीएनयू और घोस्टस्क्रिप्ट समुदायों द्वारा खराब रूप माना जाता है।

+0

मैं वास्तव में अंतिम वाक्य को समझ नहीं पा रहा हूं ... – CAFEBABE

+2

@CAFEBABE: इसे 'ls' के परिणामों को पार्स करने के लिए वर्जित माना जाता है क्योंकि यह आम तौर पर बग की ओर जाता है। सवाल में वाक्य इसे कॉल करने की कोशिश कर रहा था। इसमें एक मजाक भी था जिसे मैंने हटा दिया है। –

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