令$foo
和$bar
为两个绝对目录名称(由 输出realpath
)。我想测试其中一个是否包含在另一个中,在任何深度,并相应地执行命令。
我想我会使用find
,但它的退出状态并不能说明是否已找到某些内容。所以我来到了:
if [ x$(find -H "$foo" -path "$bar" -printf y -quit) == xy \
-o x$(find -H "$bar" -path "$foo" -printf y -quit) == xy ] ; then
...
fi
这是对的吗?有没有更简单的东西?
上下文:我的主目录包含一个加密文件夹(ecryptfs)。我正在编写一个脚本,将其参数同步到云。我不希望同步解密的文件,因此我将测试参数是否与加密文件夹重叠,以在同步之前卸载 ecryptfs。
答案1
我不确定我是否完全理解这个问题和上下文。但也许这有效:
foo="$(realpath "...")"
bar="$(realpath "...")"
if [[ $foo = $bar/* || $bar = $foo/* ]]; then
echo "Overlap"
fi
请注意,如果一棵树符号链接到另一棵树,则这将不起作用。