サラリーマンレベル1

自称大手IT企業の入社一年目リーマンの戯言

cp myapp myapp2

こんばんは。

 

unixを学習していたところ、

基本的なコマンド[ cp ]でつまずきました。

 

vagrantを使って、ローカル開発環境で学習していました。

打った時のコマンドは下記の通り。

 

[vagrant@localhost php_lessons]$ cp myapp myapp2

cp: omitting directory 'myapp'

 

これで php_lessons フォルダ内に myapp フォルダのコピーである myapp2 フォルダができたと思ったのですが出てきたのは cp: omitting directory 'myapp'

php_lessons フォルダ内を確認したところコピーが出来ていませんでした。

 

omitting directory というのはディレクトリを省略しているからコピー出来ていませんよ、という意味。unixではフォルダのコピーは以下の通り-rオプションをつけなければ出来ないのです。

 

これが正解。

[vagrant@localhost php_lessons]$ cp -r myapp myapp2

 

これで無事に出来ました。

-r オプションの意味するリカーシブってなんなのって思い調べてみたところ、

再帰的な意味ということで、処理中に自分自身を呼び出すことみたいです。

 

納得のいく回答がネットに見つからないので、自分なりの答えです。

前提条件として以下の2点があります。

・そもそも階層ディレクトリシステムは再帰構造の一つである木構造をベースである

・cpコマンドに限らず、全てのunixコマンドは「ディレクトリ内に存在するデータに対して処理を行う」ことである

 

実はcpコマンドを使用した時、僕らがコピーしたいのはデータでもなく、フォルダでもなく、ディレクトリです。

 

-r オプションを使用することで、「コマンドの対象がもしディレクトリであれば〜」という意味合いを付け加えることになり、階層ディレクトリシステムにおけるコピーが実施できるようになるのではないでしょうか。

 

ごめんなさい、自分でも言ってる意味がよくわからないですが終わり。