Bash中是否有一个简单的测试来测试逻辑路径是否是目录

问题描述 投票:0回答:1

最好通过一个小例子来解释这个问题:

创建目录的基础结构,如下所示:

rm -rf /tmp/work  
mkdir -p /tmp/work/a/b/c  
cd /tmp/work  
ln -s a/b/c s  
mkdir t  
tree  

这将导致以下基础结构:

Directory infrastructure

有一种非常简单的方法来检查目录是否存在:

cd /tmp/work
if test -d s/../t; then echo EXISTS; else echo DOES NOT EXIST; fi

Directory test

但是,似乎'-d'测试仅检查物理路径(a/b/t);以下内容清楚表明逻辑路径/目录does存在:

cd s/../t
pwd

Logical path

我希望通过简单的测试来检查这种情况...在检查StackOverflow中的类似问题时,我没有找到将逻辑路径与物理路径区分​​开的答案...

我进行了蛮力(愚蠢的尝试,以获得更多见识:

for o in -b -c -d -e -f -g -G -k -h -L -O -p -r -S -s -t -u -w -x; do
  if test $o s/../t; then echo EXISTS; else echo DOES NOT EXIST; fi
done

按预期,所有测试均指示失败...

testing directory exists
1个回答
0
投票

最接近简单解决方案的是以下测试:

if (cd -L s/../t &>/dev/null); then echo EXISTS; else echo DOES NOT EXIST; fi

如果使用'-P'而不是'-L',则此语法测试物理路径(等同于'test -d')。

请注意,如果我们确定使用的是内置函数,则语法会稍微简单一些:

if (cd s/../t &>/dev/null); then echo EXISTS; else echo DOES NOT EXIST; fi

但是必须有更好的方法...

© www.soinside.com 2019 - 2024. All rights reserved.