ブログ

cpコマンドで上書き時にバックアップを作成する方法

at_shiita.ishigaki
2021年10月19日 9時18分

cpコマンドはコピー先のファイルが既に存在している場合、通常上書きをしてしまいます。

[armadillo ~]# echo hoge > hoge
[armadillo ~]# echo fuga > fuga
[armadillo ~]# cat fuga
fuga
[armadillo ~]# cp hoge fuga
[armadillo ~]# cat fuga
hoge

cpコマンドで上書き時にバックアップを取るには-bオプションを使用します。

[armadillo ~]# cp -b hoge fuga
[armadillo ~]# ls
fuga  fuga~  hoge
[armadillo ~]# cat fuga
hoge
[armadillo ~]# cat fuga~
fuga

cpコマンドの引数に同じファイルを与え、-bオプションを使用することで、簡単にバックアップを作成することが来ます。
また、同じファイル名で保存する場合エラーが表示されるため、-fオプションも使用します。
※ここでは例として、hogeのバックアップを取ります。

[armadillo ~]# ls
hoge
[armadillo ~]# cp -b hoge{,}
cp: 'hoge' and 'hoge' are the same file
[armadillo ~]# cp -fb hoge{,}
[armadillo ~]# ls
hoge  hoge~

コピー先のをsuffixを変更する場合はSオプションを使用します。
※ここでは例として、suffixを_に変更します。

[armadillo ~]# ls
hoge
[armadillo ~]# cp -fb -S_ hoge{,}
[armadillo ~]# ls
hoge  hoge_

数字を1,2,3…と増やしていき、バックアップを取る場合は--backup=numberedオプションを使用します。

[armadillo ~]# cp -f --backup=numbered hoge{,}
[armadillo ~]# ls
hoge  hoge.~1~ 
[armadillo ~]# cp -f --backup=numbered hoge{,}
[armadillo ~]# ls
hoge  hoge.~1~  hoge.~2~