.bakを再帰的につけるバックアップスクリプト


bak() (
    for file in "$@"; do
        bakfile="$file"'.bak'
        if [ -e "$bakfile" ]; then
            echo 'already exists: '"$bakfile"
            bak "$bakfile"
        fi
        cp "$file" "$bakfile"
    done
)

~/.bashrc などに追記すると、

fileA
This is A.

に対して

$ ls
fileA
$ bak fileA
$ ls
fileA fileA.bak
$ echo 'This is A!' > fileA # fileAの中身を This is A! に上書き
$ bak fileA
already exists: fileA.bak
$ ls
fileA fileA.bak fileA.bak.bak

とするとき、それぞれのファイルの中身は、

fileA fileA.bak fileA.bak.bak
This is A! This is A! This is A.

という調子で、より古いファイルに .bak がどんどんつきます。