/tmp/aaa/ が次のようにあったとします。
$ tree /tmp/aaa/
/tmp/aaa/
`-- xxx
0 directories, 1 file
次のコマンドで、
$ cp -a /tmp/aaa/ /tmp/zzz/
/tmp/zzz/ はどうなるでしょうか?
$ tree /tmp/zzz/
もし /tmp/zzz/ が存在しなければ次のようになります。
$ tree /tmp/zzz/
/tmp/zzz/
`-- xxx
0 directories, 1 file
もし /tmp/zzz/ が存在すれば次のようになります。
$ tree /tmp/zzz/
/tmp/zzz/
`-- aaa
`-- xxx
1 directory, 1 file
なので同じコマンドを2回実行するとこんなことになります。
$ rm -fr /tmp/zzz/
$ cp -a /tmp/aaa/ /tmp/zzz/
$ cp -a /tmp/aaa/ /tmp/zzz/
$ tree /tmp/zzz/
/tmp/zzz/
|-- aaa
| `-- xxx
`-- xxx
1 directory, 2 files
個人的にはこの動作が非常に判りにくく感じるので、ローカルでコピーするときも rsync を使うことが多いです。
rsync なら ディレクトリ末尾に / を付けさえすれば コピー先にディレクトリがあろうとなかろうと結果は同じだからです。
$ rm -fr /tmp/zzz/
$ rsync -a /tmp/aaa/ /tmp/zzz/
$ tree /tmp/zzz/
/tmp/zzz/
`-- xxx
0 directories, 1 file
$ rm /tmp/zzz/xxx
$ rsync -a /tmp/aaa/ /tmp/zzz/
$ tree /tmp/zzz/
/tmp/zzz/
`-- xxx
0 directories, 1 file
あるいは cp でもコピー元ディレクトリの末尾に /. を付けると似たような動作になります。
$ rm -fr /tmp/zzz/
$ cp -a /tmp/aaa/. /tmp/zzz/
$ tree /tmp/zzz/
/tmp/zzz/
`-- xxx
0 directories, 1 file
$ rm /tmp/zzz/xxx
$ cp -a /tmp/aaa/. /tmp/zzz/
$ tree /tmp/zzz/
/tmp/zzz/
`-- xxx
0 directories, 1 file
さらにコピー先ディレクトリの末尾に /. を付けると、コピー先ディレクトリがなければ失敗します(意図しない形でコピーされるよりは失敗した方がマシ)。
$ rm -fr /tmp/zzz/
$ cp -a /tmp/aaa/. /tmp/zzz/.
cp: cannot create directory `/tmp/zzz/.': No such file or directory
$ mkdir /tmp/zzz/
$ cp -a /tmp/aaa/. /tmp/zzz/.
$ tree /tmp/zzz/
/tmp/zzz/
`-- xxx
0 directories, 1 file