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

(Bshell)ファイルがn日経過したものを別ディレクトリへ移動するシェルスクリプトを修正したいです

#!/bin/sh
LANG=C;export LANG
KEEP_DAYS=10
#移動元
acclogdir=/export/home/justadmi/test/acclog
consoledir=/export/home/justadmi/test/consolelog
sardir=/export/home/justadmi/test/sarlog
#移動先
target_accelogdir=/export/home/justadmi/test/mv_acdir
target_consoleldir=/export/home/justadmi/test/mv_consdi
target_sardir=/export/home/justadmi/test/mv_sadir
#ファイル移動の条件
LIST="
$acclogdir,access.200,$target_accelogdir
$consoledir,jusmgdp02_console.log.200,$target_consoleldir
$sardir,sa200,$target_sardir
"
for i in $LIST
do
DIR=`echo "${i}"|cut -d ',' -f1`
FILE=`echo "${i}"|cut -d ',' -f2`
TARGETDIR=`echo "${i}"|cut -d ',' -f3`
cd $DIR
mv `find . -name $FILE\* -type f -mtime +$KEEP_DAYS -print` $TARGETDIR
done
exit 0

移動元(3ディレクトリを対象)には、複数のファイルが存在し、エラーハンドリングとして、対象のファイルが無い場合は、なにもせず終了としたく

どのように記述をしたらよいでしょうか。宜しくお願いいたします。


●質問者: otanako
●カテゴリ:コンピュータ
✍キーワード:/bin/sh access CD Dir echo
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● keino
●35ポイント

cd した先に条件に合うファイルが存在するかどうかあらかじめ検査した上で mv を実行すればいいわけですよね。

確か組み込み関数のtest あるいは [...] を使えば検査できたはずだけど、回答にするほどには自信を持った答えはマニュアルを今は参照できないのでかけません。

おおざっはに書くと、

TARGETDIR=`echo "${i}"|cut -d ',' -f3`

cd $DIR

mv `find . -name $FILE\* -type f -mtime +$KEEP_DAYS -print` $TARGETDIR

done

これを↓のような感じに変更すればいいはず。

TARGETDIR=`echo "${i}"|cut -d ',' -f3`

cd $DIR

if [`find . -name $FILE\* -type f -mtime +$KEEP_DAYS -print`] then

mv `find . -name $FILE\* -type f -mtime +$KEEP_DAYS -print` $TARGETDIR

else

exit 0

endif

done

組み込みtest関数の使い方を思い出せないので、正しいoptionの使い方を確認して、もう少し修正してから試してみてください。


2 ● zzz_1980
●35ポイント

find を以下のように修正してください。

#mv `find . -name $FILE\* -type f -mtime +$KEEP_DAYS -print` $TARGETDIR
find . -name $FILE\* -type f -mtime +$KEEP_DAYS -exec mv {} $TARGETDIR \;

xargs を使っていないのは gnu の mv でないとうまく動かないから。

テスト環境は FreeBSD で traditional なコマンドオプションのみ使っています。

関連質問


●質問をもっと探す●



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