测试两个目录树是否重叠

测试两个目录树是否重叠

$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

请注意,如果一棵树符号链接到另一棵树,则这将不起作用。

相关内容