1

を使用して Xn of days に基づいて古いファイルを削除するための信頼できるシェル スクリプトを作成しようとしていますfind。ただし、スクリプトは断続的に動作するようです。より良い方法はありますか?最初にファイルをリストして、それらを確実にキャプチャしてから、使用-exec rm{}して削除します。

次のようにスクリプトを実行します。 /home/scripts/rmfiles.sh /u05/backup/export/test dmp 1

#!/usr/bin/ksh

if [ $# != 3 ]; then
   echo "Usage: rmfiles.sh <directory> <log|dmp|par> <numberofdays>" 2>&1
   exit 1
fi

# Declare variables
HOURDATE=`date '+%Y%m%d%H%M'`;
CLEANDIR=$1;
DELETELOG=/tmp/cleanup.log;

echo "Listing files to remove..." > $DELETELOG 2>&1
/usr/bin/find $CLEANDIR -name "*.$2" -mtime +$3 -exec ls -ltr {} \; > $DELETELOG 2>&1

echo "Removing files --> $HOURDATE" > $DELETELOG 2>&1
#/usr/bin/find $CLEANDIR -name "*.$2" -mtime +$3 -exec rm {} \; > $DELETELOG 2>&1

私のサンプル ディレクトリには、今日の時点で明らかに 1 日以上前のファイルがありますが、find以前のテストでは以前のようには検出されませんでした。

Thu Sep 26 08:54:57 PDT 2013

total 161313630
-rw-------   1 oracle     dba        10737418240 Sep 24 14:17 testexp01.dmp
-rw-------   1 oracle     dba        10737418240 Sep 24 14:20 testexp02.dmp
-rw-------   1 oracle     dba        10737418240 Sep 24 14:30 testexp03.dmp
-rw-------   1 oracle     dba            508 Sep 24 15:41 EXPORT-20130924.log
-rw-------   1 oracle     dba            509 Sep 25 06:00 EXPORT-20130925.log
-rw-------   1 oracle     dba            508 Sep 26 08:30 EXPORT-20130926.log
4

2 に答える 2