32137


**やりたいこと**  
・指定ディレクトリ内に入っているファイルの中から、実行日(もしくは指定した日付)から5日前以上のファイルを、ファイル名から判断して削除したい  
・最終的にcronから呼び出したいので、shファイルとして作成したい

* * *

**環境**  
・CentOS

* * *

**指定ディレクトリ内のファイル名**  
・ファイル名の一部として日付を入れています  
・日付部分以外は固定です

> test_data_20170106.hoge.gz
>
> test_data_20170107.hoge.gz
>
> test_data_20170111.hoge.gz


CC BY-SA 3.0
2017-01-25T02:57:50.353
32128
2018-09-27T11:15:48.120
7886
question
linux centos shellscript sh
実行日(もしくは指定した日付)から5日前以上のファイルを、ファイル名から判断して削除するsh

[code]

    cd 目的dir
    DELDAY=`date --date '5 days ago' '+%Y%m%d'`
    
    for LINE in `find -iname "test_data_*.hoge.gz"`
    do
      FILEDATE=`echo "$LINE" | sed -e 's/[^0-9]//g'`
      if [ $DELDAY -gt $FILEDATE ] ; then
        echo "delete $LINE"
        rm -f $LINE
      fi
    done
    
[/code]

findを使ったパターンになります。  
一応余計なファイルが入ってても誤削除はしないようにはなってます。


CC BY-SA 3.0
2017-01-25T05:43:43.510
32137
2017-01-25T09:48:21.313
2017-01-25T09:48:21.313
19716
19716
32128
answer


cronでずっと動いているのが前提なら、

[code]

    DELDAY=`date --date '5 days ago' '+%Y%m%d'`
    rm -f test_data_$DELDAY*.sql
    
[/code]

の2行だけでも良いのではないでしょうか？  
特定の日付しか消しませんが、それ以前の日付は毎日消されて行っているという意味で、、。


CC BY-SA 4.0
2018-09-27T11:15:48.120
48767
2018-09-27T11:15:48.120
30255
32128
answer