|-- 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
を使う。
|-- 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