我的环境是:
GNU coreutils 8.4 有 test 命令来检查文件 using-f选项。
man test 显示
Run Code Online (Sandbox Code Playgroud)-f FILE FILE exists and is a regular file
“常规文件”的定义对我来说是模棱两可的。
在终端上,我做了
$ touch afile
$ ln -fs afile LN-FILE
Run Code Online (Sandbox Code Playgroud)
然后,我执行了以下脚本(check_file_exist_180320_exec)
#!/usr/bin/env bash
if [ -e LN-file ]
then
echo "file exists [-e]"
fi
if [ -f LN-file ]
then
echo "file exists [-f]"
fi
Run Code Online (Sandbox Code Playgroud)
对于 CentOS 和 Ubuntu,对于符号链接文件 (LN-FILE),都显示 -e 和 -f。
但是, ls -l 返回l:symbolik link(不是-:regular file)LN-FILE 文件的标识符。(见。https://linuxconfig.org/identifying-file-types-in-linux)
另一方面,我发现以下, if -e 和 if -f 之间的区别
常规文件不是目录/符号链接/套接字/设备等。
2012 年 4 月 18 日 7:10 回答
杰曼
我应该检查“常规文件”(对于 CentOS 和 Ubuntu)的参考是什么?
请注意下面的文档 man test
除了 -h 和 -L,所有与 FILE 相关的测试都取消引用符号链接。
基本上,当您执行-f LN-fileLN-file 是符号链接时,-f测试将遵循该符号链接,并为您提供符号链接指向的结果。
如果要检查文件是符号链接还是常规文件,则需要执行例如
if [ -h LN-file ]
then
echo "file is a symlink [-h]"
elif [ -f LN-file ]
then
echo "file is a regular file [-f]"
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
489 次 |
| 最近记录: |