2012-01-25 6 views
59

यदि मैं लूप के साथ निर्देशिका को पुन: सक्रिय करता हूं तो मैं केवल फ़ाइल के फ़ाइल नाम को प्रतिबिंबित करने के बारे में कैसे जा सकता हूं?निर्देशिका में फ़ाइलों के लिए, केवल echo फ़ाइल नाम (कोई पथ नहीं)

for filename in /home/user/* 
do 
    echo $filename 
done; 

फ़ाइल नाम के साथ पूरा पथ खींच जाएगा। मुझे बस फाइल का नाम चाहिए।

उत्तर

106

आप एक देशी bash समाधान

for file in /home/user/*; do 
    echo ${file##*/} 
done 

चाहते हैं इसके बाद के संस्करण का उपयोग करता है पैरामीटर विस्तार जो खोल के मूल निवासी है और इस तरह basename

के रूप में एक बाहरी द्विआधारी के लिए एक कॉल की आवश्यकता नहीं है हालांकि, क्या मैं सुझाव दे सकता हूं कि find

find /home/user -type f -printf "%f\n" 
+7

अच्छा जवाब। पैरामीटर विस्तार के बारे में अधिक जानने में रुचि रखने वालों के लिए: http://wiki.bash-hackers.org/syntax/pe#substring_removal – DougW

+0

-printf: अज्ञात प्राथमिक या ऑपरेटर – Matthew

32

बस basename का उपयोग करें:

echo `basename "$filename"` 

उद्धरण मामले में की जरूरत है $ फ़ाइल नाम उदा शामिल रिक्त स्थान।

+0

धन्यवाद। सीधा। पैरामीटर विस्तार का उपयोग करने के लिए – Mechaflash

+2

बेहतर, बाहरी बाइनरी के लिए कोई कॉल की आवश्यकता नहीं है। – SiegeX

+4

बीटीडब्ल्यू, '' बहिष्कृत है। ओली जैसे '$()' का उपयोग करने के लिए बेहतर – SiegeX

12

उपयोग basename:

echo $(basename /foo/bar/stuff) 
संबंधित मुद्दे