はじめに
現在Ubuntuを使用してLinuxを勉強していますが、ふとmv
に-r
がないのはなぜだろうと思い記事にすることにしました。
-r
とは
というのも、rm
やcp
コマンドでディレクトリの操作を行うときに-r
を付けないとエラーが出ますが、mv
の場合だと不要なのは不思議ですよね。
これについて、いろいろ調べてみたところ、-r
のrはrecursive
(再帰的な)という英単語の頭文字らしいです。
再帰的とは
ディレクトリの中にはディレクトリやファイルがあり、そのディレクトリの中にも...と何層ものファイルやディレクトリが存在します。
上記のように、似たもの(ファイルやディレクトリ)が階層になって存在する構造を再帰的構造といいます。
例えば~/dir1/dir2/dir3/file
(dirはディレクトリ、fileはファイル)のようなファイル構造があったとします。
rm -r dir1
このコマンドによって削除されるのはdir1だけでなく、dir2やdir3、fileも同様に削除されます。
このようにディレクトリ全体を削除する場合はその中にあるすべてのファイルやサブディレクトリを削除する必要があります。
これは再帰的な操作(ディレクトリ内をすべて辿って操作を行うこと)になるため、-r
(recursive)が必要になります。
cp
においても同様で、ディレクトリの場合はその中身をすべてコピーする必要があります。
ディレクトリの中にディレクトリがあったりファイルが複数あったりする場合、それらを再帰的に辿ってコピーするために-r
が必要です。
ではmv
の場合はどうでしょうか。
mv
はファイルやディレクトリを移動または名前変更するコマンドです。mv
はファイルもディレクトリも区別せず、そのまま移動するか名前を変更します。
移動の際は、ディレクトリそのものの構造が変わらないため、再帰的に中身を辿る必要はありません。ディレクトリごと、そのまま移動するだけなので、-r
は不要です。