我正在尝试编写一个脚本shell,它将两个参数作为目录名称,并确定目录1是否包含目录2,反之亦然。如果它们之间没有任何关系,也可以。
我知道检查目录是否存在的命令是find -type d,但是我对如何检查和解析名称感到有点困惑。我知道我需要if-else循环,只是不确定如何检查条件?
答案 0 :(得分:3)
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/bin
和sym2 -> /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
表示失败。