2011-12-15 4 views
35

ls /home/user/new/*.txt उस निर्देशिका में सभी txt फ़ाइलों को प्रिंट करता है। हालांकि यह आउटपुट को निम्नानुसार प्रिंट करता है:संपूर्ण निर्देशिका पथ के बिना केवल फ़ाइल नाम दिखाने के लिए

[[email protected]]$ ls /home/user/new/*.txt 
/home/user/new/file1.txt /home/user/new/file2.txt /home/user/new/file3.txt 

और इसी तरह।

मैं ls आदेश /home/user/new/ निर्देशिका से नहीं चलाने के लिए इस प्रकार मैं है पूरा निर्देशिका का नाम देना चाहता हूँ, फिर भी मैं उत्पादन केवल

[[email protected]]$ ls /home/user/new/*.txt 
file1.txt file2.txt file3.txt 

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

+0

क्या ओएस? उदाहरण के लिए ओएस एक्स वह करता है जो आप पहले से चाहते हैं। क्या आप निश्चित रूप से एलआईएस नहीं हैं? –

उत्तर

60

ls whateveryouwant | xargs -n 1 basename

आप के लिए है कि काम करता है?

नहीं तो आप (cd /the/directory && ls) (हाँ, इरादा कोष्ठकों) कर सकते हैं

+0

हां, यह काम किया। आपका बहुत बहुत धन्यवाद। – Ashish

+2

यदि आपको 'whateveryouwant' एकाधिक निर्देशिकाओं को संदर्भित करता है तो आपको शायद' ls -d' का उपयोग करना चाहिए। –

+3

ध्यान दें कि यदि पथ में रिक्त स्थान xargs हैं तो उन्हें तोड़ दिया जाएगा। इसके बजाय आपको 'xargs -d '\ n' -n 1' का उपयोग करने की आवश्यकता है। – Zitrax

7

ऐसे कई तरीके आप इस लक्ष्य को हासिल कर सकते हैं।

for filepath in /path/to/dir/* 
do 
    filename=$(basename $file) 

    ... whatever you want to do with the file here 
done 
4

आप अपने कमांडलाइन के लिए एक sed स्क्रिप्ट जोड़ सकते हैं:: एक कुछ जैसा होगा

ls /home/user/new/*.txt | sed -r 's/^.+\///' 
1

मैं आधार नाम जो पहले से ही fge द्वारा उत्तर दिया जाता है पसंद करते हैं। एक और तरीका है:

ls /home/user/new/*.txt|awk -F"/" '{print $NF}' 

एक और बदसूरत तरीका है:

ls /home/user/new/*.txt| perl -pe 's/\//\n/g'|tail -1 
4

एक फैंसी जिस तरह से यह दो बार "द रेव" का उपयोग करना है और "कट" हल करने के लिए:

find ./ -name "*.txt" | rev | cut -d '/' -f1 | rev 
29

Xargs और सभी के लिए कोई ज़रूरत नहीं है, एलएस पर्याप्त से अधिक है।

ls -1 *.txt 

पंक्ति बुद्धिमान

+8

यदि आप OP को सावधानी से पढ़ते हैं तो यह सही नहीं है। यह केवल तभी काम करता है जब आप उस निर्देशिका में हों। –

+0

पूरी तरह से काम करता है! धन्यवाद @ वीआरवीगेश्वर! लिनक्स डेबियन पर पथ के बिना बिन/निर्देशिका के अंदर 'ls -1 bin/'सूची प्रविष्टियां। –

0

बस के रूप में पुरानी समस्याओं अब और फिर से वापस हर आने के लिए लग रहे हैं और मैं हमेशा अच्छा युक्तियां यहां किसी के लिए उपयोगी हो करने की उम्मीद कर प्रदर्शित करता है।

मेरी समस्या किसी पाठ निर्देशिका में "* .txt" फ़ाइलों के सभी नामों को पथ के बिना और डेटास्टेज 7.5 अनुक्रम से विस्तार के बिना सभी फाइलों में सूचीबद्ध करना था।

समाधान हम प्रयोग किया जाता है:

ls /home/user/new/*.txt | xargs -n 1 basename | cut -d '.' -f1 > name_list.txt 
2

(cd dir ; ls)

होगा में केवल उत्पादन फ़ाइल नाम निर्देशिका। यदि आप प्रति पंक्ति एक चाहते हैं तो ls -1 का उपयोग करें।

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