我知道您可以使用以下方式测试文件是否是目录:
if(-d $filename)
但如果它不是一个目录,那该怎么测试呢?
我知道您可以使用以下方式测试文件是否是目录:
if(-d $filename)
但如果它不是一个目录,那该怎么测试呢?
你考虑过尝试以下方法吗?
if (! -d $filename) ...
-d
的结果实际上可以被视为布尔值,因此逻辑非操作符!
将起作用。
而且,如果你需要比“不是一个目录”更具体的东西,请参见这里。有很多东西并不是目录,有时将其视为常规文件是没有意义的。
请记住,这是在假设您已经验证了文件名是否存在的情况下。如果您对不存在的文件名执行!-d
,它将返回true。
这是一个哲学问题,即您是否认为不存在的东西是“不是目录”,但如果您还想确保它存在,可以将!-d
与-e
一起使用,类似于:
if ((-e $filename) && (! -d $filename)) ...
!-d NO_SUCH_FILE
返回 true),这个答案也会返回 true。 - DVKif (-e $file && !-d $file) { # a file but not a directory }
恕我直言,paxdiablo的回答对于问题的措辞是错误的(纯粹的!-d
不能满足用户所要求的检查文件是否为非目录文件,因为它只会检查一个随机的东西或字符串是否不是目录,例如!-d NO_SUCH_FILE
返回真值)。
Greg的答案可能是正确的,这完全取决于原始用户是否想在他们对“不是目录的文件”的定义中包括非普通文件(例如符号链接,命名管道等)。如果他们想包括所有这些特殊的“文件”,那么Greg的答案也是错误的,因为“-f”会排除它们(正如Greg在他的答案中明智地指出的那样)。
-f
操作符用于测试某个文件是否为“普通文件”。这将排除目录,但也将排除诸如管道和设备节点等其他文件类型。if (-f $filename) { ...