2012-04-16 18 views
0

ディレクトリには、毎日生成されるファイルがあります。 2012年4月16日に生成されたファイルの形式はTEST_20120416です。CreationTimeに基づくファイルの削除

したがって、7日以上経過したすべてのファイルを削除する必要があります。私は(ファイル名はタイムスタンプを持っている)

#!/bin/ksh 
find /data/Test/*.* -mtime -7 -exec rm -rf {} \; 
exit 0 

が今の問題は、コードの上にある変更時刻に基づいて削除が、要件ファイルに応じて、ファイル名に基づいてファイルを削除して私を助けtime.Kindly創造に基づいて削除する必要がありますされ、これをやってみました。

+1

[ファイル作成時刻http://stackoverflow.com/questions/5929419/how-to-get-file-creation-date-in-linux – tuxuday

+0

@tuxuday:[1] [1] ]ファイルシステムに依存します。実際、そこにあるファイルシステムの大半はファイルの作成時間を把握していません。多くの場合、 'ctime'を「作成時刻」として単純に解釈していますが、それはまったくそうではありません。 – twalberg

答えて

0

あなたは幸い、ファイル名にエンコードされた作成日を持っているように、これは動作するはずです:

#!/bin/sh 
REFDATE=$(date --date='-7 days' +%Y%m%d) 
PREFIX=TEST_ 
find /data/Test/ -name $PREFIX\* | while read FNAME; do 
    if [ ${FNAME#$PREFIX} -lt $REFDATE ]; then 
     rm $FNAME 
    fi 
done 

あなたには、いくつかのより多くのフィルタリングが必要になることがあり、その場合にはTEST_で始まる名前を持つ他のファイルがある場合には警告を表示します。

-1
find /data/Test/*.* -ctime -7 -delete 

'find/data/Test/ 'は/ data/Testフォルダ内のすべてのファイルを検索し、引数' -ctime -7 'は検索時間を7日間に制限し、-deleteオプションはそのファイルを削除します

+1

' -mtime'は変更時刻をフィルタリングします。より良い選択肢は '-ctime 'でしょう。こちらもご覧ください:http://stackoverflow.com/q/10171069/694576 – alk

+2

1ライナーを回答として投稿する場合は、少なくとも1つまたは2つの文章で説明してください。 Nooneは自分のマシン上のインターネットからランダムなコマンドを実行します。 –

+0

さて、私の悪い。 find /data/Test/*.*は/ data/Testフォルダ内のすべてのファイルを検索し、引数-ctime -7は検索時間を最後の7日間に制限し、-deleteオプションはそのようなファイルを削除します –

関連する問題