cpコマンドでファイルをバックアップする時に使える便利なオプション | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

Linux上でファイルのバックアップしようと思って一番シンプルにするとなるとcpコマンドを使うことになるかと思います。

まぁ、単純に


$ cp foo bar

みたいなことをするんですが、GNUオプションをみているとバックアップする用途なら結構便利そうなオプションが幾つかあります。



コピーしたファイルに番号をつける


良くありがちなのが末尾に番号をつけていくというものです。


$ cp foo foo.1

みたいな。
ただ、番号(バージョン)をきちんと管理したいなら手動でやるとミスるので下記の--backupオプションが便利かもしれません。


$ cp --backup=numbered -f foo foo
$ ls
foo foo.~1~
$ cp --backup=numbered -f foo foo
$ ls
foo foo.~1~ foo.~2~

2回実行すると番号がインクリメントされていきます。
cpはコピー元とコピー先に同じファイル名を指定すると怒られるので-f(--force)オプションをつけてあげる必要があります。

--backupオプションはnumberedをつけなければ単純に末尾にチルダ(~)がついたファイルが作られます。


$ cp --backup -f foo foo
$ ls
foo foo~


コピーしたファイルに日付をつける


特にオプションをつけなくても


$ cp foo `date +foo_%Y%m%d`
$ ls
foo foo_20140513

のようなことをすれば日付がついたバックアップファイルをつけることができますが、--suffixオプションをつけることでも日付をつけたファイルを作ることができたりします。


$ cp --suffix=_`date +%Y%m%d` -f foo foo
$ ls
foo foo_20140513

この--suffixオプションは省略した場合、環境変数のSIMPLE_BACKUP_SUFFIXが使われ、デフォルトではチルダとなっています。


export SIMPLE_BACKUP_SUFFIX=_

などとして、サフィックスをアンダーバーに変更しておき、


$ cp --backup -f foo foo
$ ls
foo foo_

と実行すると、チルダではなくアンダーバーが付加されたバックアップファイルが作成されます。
常に日付をつけたければ


export SIMPLE_BACKUP_SUFFIX=`date +_%Y%m%d`

としておけば、--suffixオプションを指定せずに日付つきのバックアップファイルが作られます。


$ cp --backup -f foo foo
$ ls
foo foo_20140513


コピー先のバックアップファイル名の指定を省略する


通常、cpコマンドはコピー元とコピー先の2つを指定しなくてはいけません。


$ cp foo
cp: missing destination file operand after `foo'
詳しくは `cp --help' を実行して下さい.

ただ、下記のようにするとコピー先のファイル名を省略することが可能です。


$ cp foo{,.bk}
$ ls
foo foo.bk

日付を入れたい場合は、{}内にdateコマンドを差し込むことで可能です。


$ cp foo{,`date +_%Y%m%d`}
$ ls
foo foo_20140513

まぁ、コピー先のファイル名を指定したほうが早いという場合がありますが、ファイル名が長い場合やシェルスクリプトにcpコマンドを組み込みたいといった場合は便利かもしれません。