それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

cp コマンドのバックアップ・オプション

cp コマンドには、gnu 標準のバックアップ・オプションが設定されているとわかった。

-b をつけるとバックアップモード

バックアップモードをつけると、拡張子の後ろに「 ~ (tilde)」 がついたバックアップが取られる。

takuya@rena:~/Desktop$ cp -rT -b  test test2
takuya@rena:~/Desktop$ tree test2 test
test2
├── a.txt
└── a.txt~
test
└── a.txt

バックアップの~ チルダは環境変数 SIMPLE_BACKUP_SUFFIX で指定可能です。

.back の拡張子でバックアップとりつつcp

チルダだとEmacs っぽいし、区別がつかなさそうなので、拡張子をかえてみた。

takuya@rena:~/Desktop$ export SIMPLE_BACKUP_SUFFIX=".back"
takuya@rena:~/Desktop$ cp -rT -b  test test2
takuya@rena:~/Desktop$ tree test2 test
test2
├── a.txt
└── a.txt.back
test
└── a.txt

0 directories, 3 files

なるほど、これはこれで便利そう。

バックアップを数字でN世代前まで。

4回コピーしたった。

takuya@rena:~/Desktop$ cp -rT  test test2 # テストディレクトリ作成
takuya@rena:~/Desktop$ cp -rT --backup=numbered  test test2
takuya@rena:~/Desktop$ cp -rT --backup=numbered  test test2
takuya@rena:~/Desktop$ cp -rT --backup=numbered  test test2
takuya@rena:~/Desktop$ cp -rT --backup=numbered  test test2

4回実行してみた。

コピー元

takuya@rena:~/Desktop$ tree test
test
└── a.txt

0 directories, 1 file

コピー先

takuya@rena:~/Desktop$ tree test2
test2
├── a.txt        # 最新のコピー(1回前)
├── a.txt.~1~ # 2回前
├── a.txt.~2~ # 3回前
└── a.txt.~3~ # 4回前 (初回コピー時)

0 directories, 4 files

個人的には

a.`date -I`.back.txt  #=> a.2014-09-25.back.txt 
a.n.txt  #=> a.1.txt  a.2.txt 

のような、拡張子を変えない、ファイル名が好きなのだけれど。。。

ちなみに cp -rT を使うとディレクトリをマルっとコピー

takuya@rena:~/Desktop$ cp -rT  test test2 

これはディレクトリをディレクトリ作成してコピーしてる。覚えておくと便利。

参考資料

Man page of CP

GNU fileutils: 2. 共通のオプション

関連資料

お困り解決 cp コマンドでdir を作らずに、上書きコピー - それマグで!