2014-04-04 70 views
0

我需要檢查具有特定擴展名的文件是否存在,以及它是否爲空。 問題是我不知道文件的名稱,只是擴展名和路徑。Bash腳本 - 檢查文件是否存在

這裏我有一個響亮的名字

FILE="/Users/test/my.out" 
if [[ -f $FILE && -s $FILE ]] ; then echo "EXIST"; fi 

使用

FILE="/Users/test/*.out" 

不要工作

+0

如果您有多個匹配該模式的文件,該怎麼辦?試試'FILE = $(ls/Users/test/* .out)' – RedX

+0

最初的條件是在這個文件夾中只有一個文件.out – user3472065

回答

-2

解決方案嘗試

FILE=$(ls "Downloads/*.zip" 2>/dev/null) 

只適用,如果只有一個文件。

+0

這個作品,謝謝!如果我在while循環中進行檢查,如果文件還不存在,則會顯示輸出「ls:/Users/test/*.out:No such file or directory」。有什麼辦法可以避免這種輸出? – user3472065

+1

看我的編輯,2>/dev/null抑制錯誤。順便說一句,我想這是一個非常糟糕的hackjob ... – Mathias

+0

是啊,不要這樣做... –

4

我建議你使用數組,如果有多個文件:

arr=(/Users/test/*.out) 

if ((${#arr[@]} > 0)) && [[ -s "${arr[0]}" ]] 
then 
    ... 
fi 
1

您可以使用數組或使用循環兩種使用@羅布麻的解決方案:

dir=/users/test 
for file in "${dir}"/*.out; do 
    break 
done 

if [ -f "${file}" ] && [ -s "${file}" ]; then 
    echo "found a regular, non-empty .out file: ${file}" 
fi 
-1

我覺得這應該這樣做:

if [ -f ${var} ]; then 
    if [ -s ${var} ]; then 
     echo "Found $var" 
    fi 
fi 
+0

我認爲你沒有正確地閱讀這個問題。 –