如何创建一个bash脚本来判断给定文件夹中的文件是符号链接还是普通文件?

时间:2014-04-03 15:31:16

标签: macos bash unix posix sh

我花了最近5个小时来追踪一个错误,其中符号链接的文件已被重新标记为普通文件(我不知道如何!)。我想在构建脚本中添加一个验证步骤,以确保不再发生这种情况。

在工作环境中,我得到了这个:

> ls -l
... [Info] ...  File1.h -> ../../a/b/File1.h 
... [Info] ...  File2.h -> ../../a/b/File2.h 
...

在腐败的环境中我得到了这个:

> ls -l
... [Info] ...  File1.h
... [Info] ...  File2.h
... 

如何制作一个强大的脚本来迭代文件夹中的文件并确保每个文件都是符号链接?

2 个答案:

答案 0 :(得分:1)

您可以使用-h-L检查文件是否为链接:

if [ -L "$your_file" ]; then
   echo "this is a link"
fi

或更短,

[ -L "$your_file" ] && echo "this is a link"

来自man test

  

-h FILE

     

存在FILE并且是符号链接(与-L相同)

     

-L FILE

     

存在FILE并且是符号链接(与-h相同)

答案 1 :(得分:1)

这是我使用的完整代码。它还以递归方式搜索。

for file in $(find Headers/  -name '*.h'); do
    if [ ! -L "$file" ]; then
        echo "Error - $file - is not a symlink.  The repo has probably been corrupted"
        exit 666 # evil exit code for an evil bug
    fi
done