(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ディレクトリを対象)には、複数のファイルが存在し、エラーハンドリングとして、対象のファイルが無い場合は、なにもせず終了としたく

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

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2008/11/10 19:25:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:keino No.1

回答回数204ベストアンサー獲得回数11

ポイント35pt

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の使い方を確認して、もう少し修正してから試してみてください。

id:zzz_1980 No.2

回答回数492ベストアンサー獲得回数64

ポイント35pt

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 なコマンドオプションのみ使っています。

  • id:keino
    あ、コメントに書くつもりが、間違って回答に書いてしまった。
    考え方は合ってると思うけど、B-Shellの構文的に合っているかどうかは自信がない(というより多分間違っている)ので、参考程度でよければ、回答をオープンし、そうでないなら放置してください。

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

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

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

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