あるディレクトリにあるファイルがn日(10日)経過したファイルを指定の
ディレクトリへ移動させるシェルスクリプトを作成したいと思っています。
以下削除スクリプトがあるとします。
これを、移動用に修正したいと考えています。
LANG=C;export LANG
KEEP_DAY=10
acclogdir=/export/home/user/logs
consoledir=/export/home/user/console/logs
sardir=/export/home/scripts/data
LIST="
$acclogdir,access.200
$consoledir,consolelog.200
$sardir,sar200
for i in $LIST
do
DIR=`echo "${i}|cut -d',' -f1`
FILE=`echo "${i]|cut -d',' -f2`
cd $DIR
find . -name $FILE\* -type -mtime + $KEEP_DAYS -print |xargs rm -f
done
exit 0
なお、acclogdir →target_acclogdir
consoledir→target_consoledir
sardir→target_sardir
へ移動させたい場合、上記スクリプトをどのように修正すると実現可能でしょうか。
ご教授のほどよろしくお願いします。
http://openlab.dino.co.jp/2008/02/20/133431188.html
によれば、
find . -name $FILE\* -type -mtime + $KEEP_DAYS -print |xargs rm -f
を
find . -name $FILE\* -type -mtime + $KEEP_DAYS -print |xargs mv -t target_$DIR
に変更すればうまくいきそうです。target_acclogdir, target_consoledir, target_sardirをあらかじめ作っておかないと怒られますが。あと、試してないので自己責任でお願いします。
#!/bin/sh LANG=C;export LANG KEEP_DAYS=10 acclogdir=/export/home/user/logs consoledir=/export/home/user/console/logs sardir=/export/home/scripts/data # target_accelogdir=/tmp target_consoleldir=/tmp target_sardir=/tmp # LIST=" $acclogdir,access.200,$target_accelogdir $consoledir,consolelog.200,$target_consoleldir $sardir,sar.200,$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
上記間違ってました。使わないでください。dirnameとbasenameを使わないといけません。
えーと、
find . -name $FILE\* -type -mtime + $KEEP_DAYS -print |xargs mv -t `dirname $DIR`/target_`basename $DIR`
でしょうか。
kelly1414213 さん
修正内容ありがとうございました。
今すぐに確認できる環境がないため、明日確認したのち、結果お知らせいたします。
zzz_1980 さん
ありがとうございます。
今すぐに試せる環境がないため、明日確認して結果をお知らせいたします。