Linux中的目录检查

时间:2015-02-06 07:39:29

标签: linux bash shell

我正在尝试编写一个脚本shell,它将两个参数作为目录名称,并确定目录1是否包含目录2,反之亦然。如果它们之间没有任何关系,也可以。

我知道检查目录是否存在的命令是find -type d,但是我对如何检查和解析名称感到有点困惑。我知道我需要if-else循环,只是不确定如何检查条件?

3 个答案:

答案 0 :(得分:3)

不需要{p> find。 与此类似的东西(但不保证带有空格或一些特殊字符的目录名称。):

if [ "$dir1" == "$dir2" ]; then
   echo "$dir1 == $dir2";
   exit;
fi
if grep -E -q "^$dir2" <<< $dir1; then
   echo "$dir1 is contained by $dir2."
   exit
fi
if grep -E -q  "^$dir1" <<< $dir2; then
   echo "$dir2 is contained by $dir1.";
fi

但是,这并不涉及符号链接。例如,sym1 -> /usr/local/binsym2 -> /usr/local显然sym2包含sym1

此外,这不会处理奇怪的目录名称,例如/usr/local/./bin,与/usr/local/bin相同,甚至/usr/local/../bin,与{{1}相同}}

---更新--- DevSolar提到/usr/bin可用于解析符号链接。在我的测试中,它还解析了奇怪的目录名称,如readlink -e.。感谢DevSolar。

答案 1 :(得分:2)

你想要这个吗?


if [ -d $1 ];then
    a=`find $1 -type d -name $2`
    if [ $a ];then
        echo "$1 has $2"
    else
        echo "$1 does NOT has $2"
    fi
fi

if [ -d $2 ];then
    b=`find $2 -type d -name $1`
    if [ $b ];then
        echo "$2 has $1"
    else
        echo "$2 does NOT has $1"
    fi
fi

答案 2 :(得分:1)

我会这样做,

find -name directory1 |grep directory2

反之亦然,然后使用

echo $?

它会使0表示成功,1表示失败。