mkdir -p 如果最终目标是符号链接

mkdir -p 如果最终目标是符号链接

假设我们有:

node_modules/
   suman/

node_modules/suman一个符号链接

如果我们这样做:

mkdir -p "$PWD/node_modules/suman"

我假设 mkdir -p 不会覆盖符号链接?

如果$PWD/node_modules是符号链接呢?我还假设mkdir -p会将符号链接视为目录?最后,如果“node_modules”符号链接到文件而不是目录怎么办?

答案1

至于mkdir,它man使得前两个子问题变得非常明显:

创建目录(如果尚不存在)。

至于文件符号链接,一个简单的实验就足够了:

$ touch a
$ ln -sr a A
$ mkdir -p A/b/c
mkdir: cannot create directory ‘A’: Not a directory

答案2

正如其他答案所说,如果它是符号链接,它将被视为文件并失败。但是,如果其他人来到这里寻找将符号链接视为目录的解决方案,那么其中之一将起作用:

mkdir -p "$(realpath DIR)"
mkdir -p "$(readlink -f DIR)"

答案3

我假设(您没有明确声明)node_modules 作为 $PWD 中的目录或符号链接存在。

首先处理你的最后一个问题 - 如果 node_modules 是一个文件(或者是一个文件的符号链接),则禁止它像目录一样运行。因此,它不能将 /suman 作为子目录并且

mkdir -p node_modules/anything

会失败并显示“不是目录”

如果 suman 作为文件(或者文件或目录的链接或符号链接)存在于目录 node_modules 中,则

mkdir -p node_modules/suman

会因“文件存在”而失败。

如果 suman 作为目录(或目录的符号链接)存在于目录 node_modules 中,则

mkdir -p node_modules/suman

不会产生错误,但不会覆盖现有目录或符号链接。

相关内容