该stat
命令是否提供或确实bash
提供了一种简单的方法来检查是否FILENAME
引用文件而不是目录?
使用bash
and stat
,这是我丑陋的解决方案:
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
[
在 OpenBSD 上使用相同的东西
stat
(以下代码也使用标准-e
测试,只是为了确保在调用之前名称存在于文件系统中stat
):(文件类型
10
表示常规文件)。如果使用 GNU
stat
:最后一个测试中的模式与字符串
regular file
和regular empty file
.要求的
stat
解决方案。stat --printf "%F" file-name
见手册(摘录如下)