2011-01-26 129 views
1

我目前正在研究一個小巧可愛的shell腳本來循環訪問特定文件夾,只輸出其中的文件,不包括任何最終的目錄。不幸的是,我不能使用find,因爲我需要訪問文件名變量。Shell腳本:檢查該文件是否爲文件而不是目錄

這是我目前的片段,這是不行的:

for filename in "/var/myfolder/*" 
do 
    if [ -f "$filename" ]; then 
    echo $filename # Is file! 
    fi 

done; 

我在做什麼錯?

回答

4

你不可以逃避的/ var/MyFolder中/ *,這意味着,你必須刪除雙引號爲了表達由外殼正確擴展到文件名的所需列表。

1

嘗試不使用雙引號的/ var/MyFolder中/ *(原因是在於,通過把雙引號你在做的所有文件一個字符串,而不是每個文件名的獨立字符串

+0

不,所有的文件都是*不是*一個字符串。這是使星號文字,它不會擴大全局。 – 2011-01-26 16:35:32

+0

你是對的,它是一個字面星號,然後在「echo $ filename」中進行擴展。 – vmpstr 2011-01-28 12:22:02

1

for filename in "/var/myfolder/*"

引號意味着你得到一個巨大的來自該glob的字符串 - 在之前緊鄰發現它只經過'循環'一次,用一些沒用的東西。

刪除引號,然後再試一次:)

+0

它不是引號內的glob。星號是文字。 – 2011-01-26 16:36:05

2

你在做什麼錯了沒有使用find。文件名可以通過使用{}來檢索。

find /var/myfolder -maxdepth 1 -type f -exec echo {} \; 
-1

您可以使用查找並避免所有這些麻煩。

for i in $(find /var/myfolder -type f) 
do 
echo $(basename $i) 
done 

這不是你想要處理的情況嗎?如果要限制深度,請使用-maxdepth選項進行查找。

相關問題