はじめに
Qiitaに記事を書いてみよう!ということで。
Linuxサーバーで、「ファイル名.日時」の形式でバックアップすることが多かったため、
その記事をチョイスしました。
実行した環境
CentOS Linux release 7.7.1908 (Core)
コマンド
「ファイル名.年月日時分秒」でバックアップする例です。
日時の形式はdateコマンドのフォーマットで調整できます。
###ファイルの場合
$ cp -p <ファイル名> <ファイル名>.`date +%Y%m%d%H%M%S`
###ディレクトリの場合(ファイルもOK)
$ cp -rp <ディレクトリ名> <ディレクトリ名>.`date +%Y%m%d%H%M%S`
面倒な点
このコマンドだと、ファイル名やディレクトリ名を2回打たなければなりません。
コピー先のファイル名を間違えて、「別ファイルのバックアップ」が紛れ込んで痛い目にあったこともあります。
自作のコマンドが置けるのであれば、そのほうが安全です。
(置けない場合は上記コマンドをいつもコピペしていました。。。)
自作コマンド化
私の場合、以下のコマンドを「bkcp」という名で /home/<ユーザ名>/bin/ に保存しています。
実際のコピーコマンドもわかるよう、表示するようにしています。
bkcp
#!/bin/bash
if [ $# -ne 1 ]; then
echo "Usage: bkcp filename" 1>&2
exit 1
fi
CMD="cp -rp $1 $1.`date +%Y%m%d%H%M%S`"
echo $CMD
`$CMD`
exit 0
bkcp実行例
$ bkcp testfile
cp -rp testfile testfile.20190924114404
コマンドの拡張例
私の好みは、年月日時分秒を付ける形でファイル名の衝突を考慮しない形ですが、
サーバの運用方法や、チームのルールによって、過去に派生コマンドを作っていました。
- 年月日でバックアップ。年月日がかぶる場合は枝番を付ける。
- 上記のルールに加え、オプションで枝番上書き可能とする。
- dateコマンドのフォーマットを指定可能にする。
参考
今回の記事を書くにあたって、改めて参考とさせていただきました。