あるパス(例:/home/hogea)の下にあるディレクトリ(フォルダ)を世帯管理したいです。
世帯数は引数でシェルスクリプトに渡して、ディレクトリ(フォルダ)のリネームを行います。
以下はディレクトリをフォルダという意味で使わせて頂きます。
前提としてフォルダ名はあらかじめ決めておく。数字0、1、2…
※0はカレントディレクトリ
(フォルダ名⇒0:カレント 1:カレントより一個古い世帯 2:カレントより2個古い世帯・・・)
・世帯数=フォルダ数の場合(例:2世帯、フォルダも2個(0、1)存在する)一番古いほうのフォルダ(1)を消して、前世帯のフォルダ(0)を1にリネームして、新しいカレントフォルダ0を作る
・世帯数>フォルダ数の場合(例:2世帯、フォルダも1個存在する)古いほうのフォルダ(0)をリネームして、新しいフォルダ(0)を作ります。
・世帯数<フォルダ数の場合(例:2世帯、フォルダも3個存在する)一番古いほうのフォルダと2番目のフォルダを削除して、3番目古いフォルダをリネーム(1)します。新しいフォルダを(0)作ります。
ご経験された方がいらっしゃいましたら参考させて頂きたいと思います。宜しくお願いします。
もしかして世代管理,つまりバックアップをとりたい,ということでしょうか?
そうであれば 2世代分バックアップするなら,ディレクトリを dir0とdir1とすると
[ -d dir1 ] && rm -rf dir1 [ -d dir0 ] && mv dir0 dir1 mkdir dir0
3世代分なら,ディレクトリを dir0,dir1,dir2として
[ -d dir2 ] && rm -rf dir2 [ -d dir1 ] && mv dir1 dir2 [ -d dir0 ] && mv dir0 dir1 mkdir dir0
一般化すると,N世代になり,ディレクトリを dir0, dir1,,,,dir(N-1)となるので
たとえばN=10の場合は
N=10 N=$(($N - 1)) [ -d dir$N ] && rm -rf $dir$N while [ $N -ge 0 ]; do [ -d dir$N ] && mv dir$N dir$(($N + 1)) N=$(($N - 1)) done mkdir dir0
となります
コメント(0件)