2012-10-09 40 views
1

我在其中有幾個文件的文件夾:巴什 - 讓整個空間具有文件名是

a b.jpg 
c d.jpg 

基本上,我想列出的文件和開展他們的一些操作,但是我未能在做的事:

for i in $(ls $folder); do echo $i; done

輸出的每一行是一個文件名的一部分,而不是整個一個:

a 
b.jpg 
c 
d.jpg 

我怎樣才能避免這種情況的猛砸,

感謝,

回答

4
for i in $folder/*; do echo "$i"; done 

或者:

(cd $folder; for i in *; do echo "$i"; done) 
+0

+1這是更好的方法 - 直接使用shell通配符比嘗試解析ls的輸出更可靠。另外,請注意'$ i'周圍的雙引號 - 當使用空格或其他有趣的字符處理文件名時,它們很重要。 –

+0

請注意,「$ folder」的第一個用法給出了帶有$文件夾前綴的文件名,第二個用來避免它。 – leslie

2

我敢肯定有一個更優雅的方式來做到這一點,但是這是怎麼了,我通常做:

ls $folder | while read filename; do 
    echo $filename 
done 
+0

它的工作,謝謝。然而,你能解釋它是如何工作的嗎?同樣,在輸出的最後,它至少在zsh中輸出「exit 1」。 – leslie

相關問題