【Linux】cpとmvのファイル存在時の挙動。

cp

ファイル

宛先に同名のファイルが存在したとき

  • 上書きされる。環境によっては無言。
    • せめてもの回避法として、コピー時には以下のようにする流派がいるらしい。
# cp srcfile destfileに相当。間違って上書きしても、destfileに追記した部分を消せば復元できる。
cat srcfile >> destfile

宛先に同名のディレクトリが存在したとき

  • コピーしない。環境によっては無言

ディレクト

中に何かあるときは-rコマンドが必要。

cp -r srcdir destdir

いくつかのケースで分岐。

宛先に同名の「ファイル」が存在したとき

  • コピーしない

宛先が既に存在するディレクトリだった場合

# tree
.
|-- 1
|   `-- 1
`-- 2

3 directories, 0 files
# cp -r 1 2
# tree
.
|-- 1
|   `-- 1
`-- 2
    `-- 1
        `-- 1

5 directories, 0 files
#
  • 再帰コピーでコピー先とパスがかぶった場合、ファイルなら上書きする。
  • 再帰コピーでコピー先とパスがかぶった場合、ディレクトリならマージする。 ← !
  • ディレクトリがネストしていても対応。

mv

ファイル

宛先に同名のファイルが存在したとき

  • 上書きされる。環境によっては無言。
  • 超危険なため、設定ファイルの移動だけならば日常的にはcat srcfile >> destfileを推奨。

ディレクト

移動先のディレクト

宛先に同名の「ファイル」が存在したとき

  • 移動しない

宛先がまだ何も作られていないパスだった場合

  • 移動する

宛先が既に存在するディレクトリだった場合

  • 宛先のディレクトリ直下に名前そのままで移動する ← !?
# tree
.
|-- 1
|   `-- a
|       `-- b
|           `-- c
|               |-- d
|               `-- e
`-- 2

7 directories, 0 files
# mv 1 2
# tree
.
`-- 2
    `-- 1
        `-- a
            `-- b
                `-- c
                    |-- d
                    `-- e

7 directories, 0 files
#
  • 再帰コピーでコピー先とパスがかぶった場合、ファイルでもディレクトリでもエラーとなる。 ← !

ディレクトリの挙動、いまさらだけどこマ?ってなってる。 何か設定で依存するのかな。