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

それに関しては、最初の2つのサブ問題が非常に明らかになりますmkdirman

まだディレクトリがない場合は、ディレクトリを作成します。

ファイルシンボリックリンクの場合は、簡単な実験で十分です。

$ 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

エラーは生成されませんが、既存のディレクトリやシンボリックリンクは上書きされません。

関連情報