匿名質問者

シェルスクリプトで以下のことがしたいです。

あるパス(例:/home/hogea)の下にあるディレクトリ(フォルダ)を世帯管理したいです。
世帯数は引数でシェルスクリプトに渡して、ディレクトリ(フォルダ)のリネームを行います。
以下はディレクトリをフォルダという意味で使わせて頂きます。
前提としてフォルダ名はあらかじめ決めておく。数字0、1、2…
※0はカレントディレクトリ
(フォルダ名⇒0:カレント 1:カレントより一個古い世帯 2:カレントより2個古い世帯・・・)
・世帯数=フォルダ数の場合(例:2世帯、フォルダも2個(0、1)存在する)一番古いほうのフォルダ(1)を消して、前世帯のフォルダ(0)を1にリネームして、新しいカレントフォルダ0を作る

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2016/09/07 09:20:03
匿名質問者

質問者から

匿名質問者2016/08/31 12:10:26

・世帯数>フォルダ数の場合(例:2世帯、フォルダも1個存在する)古いほうのフォルダ(0)をリネームして、新しいフォルダ(0)を作ります。

・世帯数<フォルダ数の場合(例:2世帯、フォルダも3個存在する)一番古いほうのフォルダと2番目のフォルダを削除して、3番目古いフォルダをリネーム(1)します。新しいフォルダを(0)作ります。

ご経験された方がいらっしゃいましたら参考させて頂きたいと思います。宜しくお願いします。

回答1件)

匿名回答1号 No.1

もしかして世代管理,つまりバックアップをとりたい,ということでしょうか?

そうであれば 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

となります

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません