cpコマンド
言っておきますが、ボクは今までに一度もIT業界に身を置いたコトはありません。
信託銀行、保険、ファンド、不動産業界です。
まあブログのアフィリエイトは行っていますが。
そんなボクが、ウェブサービスの基本を学ぶためにLinuxの勉強をしています。
ITに関しては初心者だと思ってください。
そして、今回は、cpコマンドについて引っかかったので、備忘録として書いておきます。
cpコマンドは、コピーするコマンドです。
例えば、aディレクトリとbディレクトリがあり、さらに、aディレクトリの中にcディレクトリとdディレクトリとeディレクトリがあるとします。
こんな状態です。
.
./a
./a/c
./a/d
./a/e
.b
そこで、
cp -r a b
と書けば、bディレクトリの中にaディレクトリと、その中身もコピーされます。
こんな状態になりますね。
.
./a
./a/c
./a/d
./a/e
.b
.b/a
.b/a/c
.b/a/d
.b/a/e
ここまでは基本。
しかし、ボクが、とある本で勉強していて引っかかったのが次です。
cpコマンドの挙動
ディレクトリの中に何も無い状態で、
mkdir a
mkdir a/c
mkdir a/d
mkdir a/e
と実行します。mkdirはディレクトリを作ると言うコマンドです。
なので、aディレクトリができて、aディレクトリの中に、cディレクトリ、dディレクトリ、eディレクトリができます。
こうなりますね。
.
./a
./a/c
./a/d
./a/e
次に、
cp -r a b
を実行すると、ボクの予想では、bディレクトリの中にaディレクトリができ、その中に、cディレクトリ、dディレクトリ、eディレクトリができると言うモノでした。
ところが実際は、bディレクトリの中に直接、cディレクトリ、dディレクトリ、eディレクトリができました。
予想。
.
./a
./a/c
./a/d
./a/e
.b
.b/a
.b/a/c
.b/a/d
.b/a/e
現実。
.
./a
./a/c
./a/d
./a/e
.b
.b/c
.b/d
.b/e
あれ?さっきと違う。
ここから小一時間、悩みました。調べてもググっても答えは見つかりません。
何度も何度もページを読み、この短いコードを読みました。
そしてついに原因を発見。
cp -r a b
を実行する場合、あらかじめbディレクトリが存在するか否かで挙動が変わるんですね。
あらかじめ bディレクトリがある場合は、そのbディレクトリの中にaディレクトリができ、その中に、cディレクトリ、dディレクトリ、eディレクトリができます。
あらかじめbディレクトリが無い場合は、まずbディレクトリが作られ、その中に直接、cディレクトリ、dディレクトリ、eディレクトリができます。
恐るべし、Linuxコマンド。
同じコマンドで挙動が変わるのです。
あまりにも基本的なコトなのでしょうか。
ググってもググっても、これについて書かれているページが見つからず。
もちろんどこかには書かれているのでしょうけど、ボクには見つけられませんでした。
あくまでも自分で繰り返し実験をして見つけた事実です。
とりあえずは解決しました。
てコトは、bディレクトリにaディレクトリごとコピーする場合は、あらかじめbディレクトリを作ってから上記コマンドを実行せよってコトですかね。