Files
如何使用 stat 或 bash 來檢查 FILENAME 是否引用文件
該
stat
命令是否提供或確實bash
提供了一種簡單的方法來檢查是否FILENAME
引用文件而不是目錄?使用
bash
andstat
,這是我醜陋的解決方案:if RESPONSE="$(LC_ALL=C stat -c%F FILENAME)"\ && [ "$RESPONSE" = 'regular file'\ -o "$RESPONSE" = 'regular empty file' ] then # do something ... fi
另請參閱此相關問題。
如果給定的
-f
名稱是正常文件的名稱或到正常文件的符號連結,則測試將為真。-h
如果給定名稱是符號連結的名稱,則測試將為真。這在man test
(或man [
)和shell 會話help test
中都有記錄。bash
這兩個測試都是任何 POSIX和實用程序都可以實現的標準測試。test``[
name=something if [ -f "$name" ] && ! [ -h "$name" ]; then # "$name" refers to a regular file fi
在 OpenBSD 上使用相同的東西
stat
(以下程式碼也使用標準-e
測試,只是為了確保名稱在呼叫之前存在於文件系統中stat
):name=something if [ -e "$name" ] && [ "$(stat -f %Hp "$name")" = "10" ]; then # "$name" refers to a regular file fi
(文件類型
10
表示正常文件)。如果使用 GNU
stat
:name=something if [ -e "$name" ] && [[ $(stat --printf=%F "$name") == "regular"*"file" ]]; then # "$name" refers to a regular file fi
最後一個測試中的模式與字元串
regular file
和regular empty file
.