sj7*_*755 7 perl file operators conditional-statements
我知道您可以使用以下方法测试文件是否是目录:
if(-d $filename)
Run Code Online (Sandbox Code Playgroud)
但是如何测试它不是目录呢?
pax*_*blo 16
你有没有想过尝试以下?
if (! -d $filename) ...
Run Code Online (Sandbox Code Playgroud)
-d毕竟,结果是可以被视为布尔值的东西,因此逻辑非运算符!将正常工作.
而且,如果您正在寻找比"非目录" 更具体的内容,请参阅此处.有很多东西不是目录,有时候作为常规文件处理是没有意义的.
请记住,假设您已经验证了文件名存在.如果! -d对不存在的文件名执行操作,则返回true.
这是一个哲学问题,你是否认为一个不存在的东西是"不是一个目录",但是,如果你想确保它也存在,你可以! -d结合使用-e,例如:
if ((-e $filename) && (! -d $filename)) ...
Run Code Online (Sandbox Code Playgroud)
要测试某些东西是否是文件,但不是目录,您需要简单地组合2个测试(没有单个测试):
if (-e $file && !-d $file) { # a file but not a directory }
Run Code Online (Sandbox Code Playgroud)
请注意:
在充分尊重的情况下,paxdiablo的答案对于问题措辞的方式是错误的(纯粹!-d不适用于用户在检查随机事物/字符串是否不是目录时所询问的内容,而不是某些事物是否是某个文件不是目录).例如,!-d NO_SUCH_FILE返回true.
Greg的答案可能是正确的,完全取决于原始用户是否在其"文件不是目录"的定义中包含非普通文件(例如符号链接,命名管道等).如果他们打算包括所有那些特殊的"文件",格雷格的回答也是错误的,因为"-f"排除了他们(正如Greg在他的回答中明智地指出的那样).