#
ドキュメント

Document

自分のための備忘録です。

cp, mv

cp

使用例

|-- sample
     |
     |-- bar
         |-- bar.txt
     |
     |-- foo
         |
         |-- foo.txt
         |
         |- foo-sub
             |
             |- foo-sub.txt
$ cp -r foo/* bar
# *が非常に重要
# -r オプションはファイルもコピー
|-- sample
     |
     |-- bar
         |-- bar.txt
         |
         |-- foo.txt
         |
         |- foo-sub
             |
             |- foo-sub.txt        
     |
     |-- foo
         |
         |-- foo.txt
         |
         |- foo-sub
             |
             |- foo-sub.txt
$ cp -r foo bar
# mvコマンド同様barの中にfooがコピーされる
|-- sample
     |
     |-- bar
         |-- bar.txt
         |
         |-- foo
             |-- foo.txt
             |
             |- foo-sub
                 |
                 |- foo-sub.txt        
     |
     |-- foo
         |
         |-- foo.txt
         |
         |- foo-sub
             |
             |- foo-sub.txt   

シンボリックリンク

cp -Rは、環境によってシンボリックリンクの扱いが異なる。

  • UNIX/Macは、シンボリックリンクを実体ファイルとしてコピー(コピー先に実体ファイルがコピー)
  • Linuxは、シンボリックリンクをシンボリックリンクとしてコピー(コピー先にシンボリックリンクがコピー)

Linuxでシンボリックリンクを実体ファイルとしてコピーする場合は、Lオプションを使用して$cp -RLを使う。

mv

例)i, nオプション

|-- sample
     |
     |-- bar
         |-- bar.txt // hello1
     |
     |-- bar.txt  // hello2
$ mv bar.txt bar
# mv bar.txt bar/ これも↑と同じ

オプションを指定しない場合、確認なしで上書きされる(`bar/bar.txtの内容はhello2になる)。

iオプションを指定すると上書きして良いか確認する(cpコマンドもiオプションも同じ挙動)

$ mv -i bar.txt bar
overwrite bar/bar.txt? (y/n [n])

nオプションは上書きしない(cpコマンドもbオプションも同じ挙動)

$ mv -n bar.txt bar
# この場合メッセージ等は表示されないが上書きされない
# 移動に指定したファイルはそのまま

bオプションについて記載があるが、MacやUbuntuのmvにはbオプションはない。

例)既存ディレクトリが存在する場合

|-- sample
     |
     |-- bar
         |-- bar.txt
     |
     |-- foo
         |
         |- foo.txt

既存ディレクトリが存在する場合はその中にコピーされる。

$ mv foo bar
# mv foo/ bar  も↑と同
# mv foo bar/ も↑と同じ
# mv foo/ bar/ ↑と同じ
|-- sample
     |
     |-- bar
         |
         |-- bar.txt
         |
         |-- foo
             |
             |- foo.txt