ファイル編集前の簡易バックアップ

Linuxの設定ファイルなどを編集する際に、編集前のファイルのバックアップを取って置きたいことがある。設定をしくじったりした場合に、元の設定に戻したいからだ。

私は、そのために、次のようなシェルコマンドを自作して利用している。

以下の内容で、~/.functionsを作成する。

bk ()
{
    file=${1##*/};
    dir=${1%${1##*/}};
    ( if [ "$dir" = "" ]; then
        true;
    else
        if [ -d "$dir" ]; then
            echo cd $dir;
            cd $dir;
        else
            echo "No such directory: $dir ";
            return 1;
        fi;
    fi;
    if [ -f "$file" ]; then
        mkdir -p .bk;
        echo cp -p $file .bk/$file.$(date +"%Y%m%d%H%M" -r $file);
        cp -p $file .bk/$file.$(date +"%Y%m%d%H%M" -r $file);
    else
        echo "No such file: $file ";
    fi )
}

この関数は、以下のような動作をするものである。
  • バックアップを取りたいファイルが存在するディレクトリに.bk/とサブディレクトリを作成する。
  • ファイルの最終変更日時(mtime)をサフィックスにもつコピーを作成する。
使用例
ktaka@hana:~$ . ~/.functions
ktaka@hana:~$ ls -la /home/ktaka/hello
-rw-r--r-- 1 ktaka ktaka 1048576000 May 27  2009 /home/ktaka/hello
ktaka@hana:~$ bk /home/ktaka/hello
cd /home/ktaka/
cp -p hello .bk/hello.200905270208
ktaka@hana:~$ ls -la /home/ktaka/.bk/hello.200905270208
-rw-r--r-- 1 ktaka ktaka 1048576000 May 27  2009 /home/ktaka/.bk/hello.200905270208
 ファイルの更新時をサフィックスに持つので、複数のバックアップファイルが存在する場合でも便利である。

~/.bashrcで.functionsを読み込むようにしておくと良い。
if [ -f ~/.functions ]; then
        . ~/.functions
fi

Comments