31000


shell-script で、ほどよくバックアップをとりながらディレクトリを作成したいです。

というのも、もし作成しようとしているディレクトリがすでに存在したならば、その名称の末尾に `.bk${N}`
を付与して移動したのちに、このディレクトリを作成したいです。

そして、ここでいう `N` は、この作成しようとしているバックアップディレクトリ名称に対して、既存のディレクトリ名称と被らないような最小の自然数です。

こういったことは、わりとよくやりたくなるのではないかと思っているのですが、一般的にこれを実現する方法などはありますか？


CC BY-SA 3.0
2016-12-08T01:29:38.157
30999
2016-12-08T02:03:51.470
754
question
shellscript unix
shell-script で、バックアップを取りながらほどよく mkdir するには


ループを回して未使用のディレクトリを見つけるスクリプトを書くのが一番簡単かと思います。

ただし、同じディレクトリに対して同時に実行してしまわないように注意してください。

[code]

    $ cat bkdir.sh 
    #!/bin/sh
    for DIR; do # 全引数に対してループ
            DIR="${DIR%/}" # 末尾の / を除去する
            if test -e "$DIR"; then
                    i=1
                    while test -e "$DIR.bk$i"; do
                            i=$((i+1))
                    done
                    mv "$DIR" "$DIR.bk$i"
            fi
            mkdir -p "$DIR"
    done
    
[/code]

実行例

[code]

    $ ./bkdir.sh /tmp/dirs/test1 /tmp/dirs/test2/
    $ ./bkdir.sh /tmp/dirs/test1 /tmp/dirs/test2/
    $ ./bkdir.sh /tmp/dirs/test1 /tmp/dirs/test2/
    $ ./bkdir.sh /tmp/dirs/test1 /tmp/dirs/test2/
    $ ./bkdir.sh /tmp/dirs/test1 /tmp/dirs/test2/
    $ ls -1F /tmp/dirs
    test1/
    test1.bk1/
    test1.bk2/
    test1.bk3/
    test1.bk4/
    test2/
    test2.bk1/
    test2.bk2/
    test2.bk3/
    test2.bk4/
    
[/code]


CC BY-SA 3.0
2016-12-08T02:03:51.470
31000
2016-12-08T02:03:51.470
9873
30999
answer