问题描述
我的环境是:
- CentOS 6.9
- Ubuntu 16.04 LTS
GNU coreutils 8.4具有test命令,可使用 -f
选项检查文件.
The GNU coreutils 8.4 has the test command to check the file using -f
option.
man test
显示
-f FILE
FILE exists and is a regular file
常规文件"的定义对我来说是模棱两可的.
The definition of the "regular file" is ambiguous for me.
我在航站楼上
$ touch afile
$ ln -fs afile LN-FILE
然后,我执行了以下脚本(check_file_exist_180320_exec)
Then, I executed the following script (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
对于CentOS和Ubuntu,对于符号链接文件(LN-FILE)都显示-e和-f.
For CentOS and Ubuntu, both show -e and -f for symbolic linked file (LN-FILE).
但是,ls -l返回LN-FILE文件的 l:symbolik链接
(不是-:regular file
)标识符.(请参阅. https://linuxconfig.org/identifying-file-types-in-linux)
However, ls -l returns l:symbolik link
(not -:regular file
) identifiers for the LN-FILE file.( see. https://linuxconfig.org/identifying-file-types-in-linux)
另一方面,我发现以下内容, if -e和if -f
On the other hand, I found following,Difference between if -e and if -f
回答了2012年4月18日7:10
answered Apr 18 '12 at 7:10
jman
我应该检查常规文件"(对于CentOS和Ubuntu)的引用是什么?
What is the reference I should check for the "regular file" (for CentOS and Ubuntu)?
推荐答案
请注意 man test
基本上,当您执行 -f LN-file
且LN-file是符号链接时, -f
测试将跟随该符号链接,并为您提供结果符号链接指向的内容.
Basically when you do -f LN-file
, and LN-file is a symbolic link, the -f
test will follow that symlink, and give you the result of what the symlink points to.
如果要检查文件是符号链接还是常规文件,则需要执行以下操作:
If you want to check if a file is a symlink or a regular file, you need to do e.g.
if [ -h LN-file ]
then
echo "file is a symlink [-h]"
elif [ -f LN-file ]
then
echo "file is a regular file [-f]"
fi
这篇关于什么是“常规文件"?在CentOS和Ubuntu上?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!