人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: 匿名質問者
●カテゴリ:インターネット 科学・統計資料
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から

・世帯数>フォルダ数の場合(例:2世帯、フォルダも1個存在する)古いほうのフォルダ(0)をリネームして、新しいフォルダ(0)を作ります。
・世帯数<フォルダ数の場合(例:2世帯、フォルダも3個存在する)一番古いほうのフォルダと2番目のフォルダを削除して、3番目古いフォルダをリネーム(1)します。新しいフォルダを(0)作ります。
ご経験された方がいらっしゃいましたら参考させて頂きたいと思います。宜しくお願いします。


1 ● 匿名回答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

となります

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ