![cp/mvコマンドで、配置先に同名のファイルがあった場合のみリネームして配置させる cp/mvコマンドで、配置先に同名のファイルがあった場合のみリネームして配置させる](/images/b/9/e/5/2/b9e52ba04be8aeea108dfa1759142d097c6921da-20151112000000.jpeg)
Windowsのエクスプローラーでコピーをすると、同名のファイルがあった場合には以下のような画面が表示される。
その時に表示される選択肢である「コピーするが両方のファイルを保持する」とほぼ同等の動作をLinuxのcp/mvコマンドで実現する場合、どうすればいいのだろう?
厳密な動作は少々異なるが、これらをcp/mvコマンドで実現する場合は「--backup」オプションを付与し、その際の動作を指定する事で実現可能だ。
例えば、連番の場合は以下のようにする。
cp --backup=t コピー元 コピー先
mv --backup=t 移動元 移動先
[root@test-centos7 ~]# ls -l /work7
合計 0
[root@test-centos7 ~]# ls -la /work/test.txt
-rw-r--r--. 1 root root 108 7月 7 20:09 /work/test.txt
[root@test-centos7 ~]#
[root@test-centos7 ~]# # ファイルをコピー(同名ファイル無し)
[root@test-centos7 ~]# \cp --backup=t /work/test.txt /work7
[root@test-centos7 ~]#
[root@test-centos7 ~]# ls -l /work7
合計 4
-rw-r--r--. 1 root root 108 11月 12 05:12 test.txt
[root@test-centos7 ~]#
[root@test-centos7 ~]# ls -l /work/test.py
-rw-r--r--. 1 root root 2223 10月 27 07:10 /work/test.py
[root@test-centos7 ~]#
[root@test-centos7 ~]# # ファイルをコピー(同名ファイル有り)
[root@test-centos7 ~]# \cp --backup=t /work/test.py /work7/test.txt
[root@test-centos7 ~]#
[root@test-centos7 ~]# ls -l /work7
合計 8
-rw-r--r--. 1 root root 2223 11月 12 05:13 test.txt
-rw-r--r--. 1 root root 108 11月 12 05:12 test.txt.~1~
[root@test-centos7 ~]#
[root@test-centos7 ~]# # mvでも同等の処理が出来る
[root@test-centos7 ~]# ls -l /work/test.rc
-rw-r--r--. 1 root root 2590 10月 28 21:31 /work/test.rc
[root@test-centos7 ~]# \mv --backup=t /work/test.rc /work7/test.txt
[root@test-centos7 ~]# ls -l /work7
合計 12
-rw-r--r--. 1 root root 2590 10月 28 21:31 test.txt
-rw-r--r--. 1 root root 108 11月 12 05:12 test.txt.~1~
-rw-r--r--. 1 root root 2223 11月 12 05:13 test.txt.~2~
[root@test-centos7 ~]# ls -l /work/test.rc
ls: /work/test.rc にアクセスできません: そのようなファイルやディレクトリはありません
ファイル名末尾にタイムスタンプを付与する場合は以下のようにする。
cp --backup --suffix=.$(date +%Y%m%d_%H%M%S) コピー元 コピー先
mv --backup --suffix=.$(date +%Y%m%d_%H%M%S) 移動元 移動先
こちらの場合、コピー先の既存ファイル名を変更する(上書きする既存のファイル名をバックアップする)という動作のため、厳密な動きはWindowsの動作とは異なっているが、代替手段としては使えるのではないだろうか?