• ベストアンサー

ファイル削除について(unix)

あるディレクトリに、ファイル名.YYYYMMDDHHMMSSという形式で保存されたファイルがあるとします。 例: aaa.20051214100000 aaa.20051215100000 aaa.20051216100000 … aaa.20060114100000 aaa.20060115100000 aaa.20060116100000 で、実行日の1ヶ月以前のファイル(例ではaaa.20051216100000以前)を削除するunixシェルを作りたいのです。 1ヶ月前の日付自体はdateコマンドで求めて、その日だけのファイル削除はできると思うのですが、1ヶ月より前のファイルを削除するにはどうしたらいいのでしょうか? とりあえず、思いついたソースです。 #!/bin/ksh #------------------------------------------------------------------------------ YY=`date +"%Y"` MM=`date +"%m"` DD=`date +"%d"` MM=`expr $MM - 1` if [ $MM = "0" ] then YY=`expr $YY - 1` $MM=12 fi rm -f aaa.$YY$MM$DD*

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

実用上は、次のコマンドだけで十分かも: find . -type f -mtime +32 | xargs rm -f

door_to_tomorrow
質問者

お礼

ありがとうございます。お礼が遅れてしまって申し訳ありません。 findコマンドって、こんな使い方があったんですね。 とても参考になりました。 結局、findコマンド使用することになりました。

その他の回答 (1)

  • bender
  • ベストアンサー率45% (108/236)
回答No.1

ファイル名の中で日付の桁数がそろっているので、「ちょうど1ヶ月前につくられた(であろう)ファイル名」と、各ファイル名を文字列比較することで、どのファイルが1ヶ月より前(後)に作られたファイルであるのかわかると思います。 例) #!/bin/ksh #------------------------------------------------------------ YY=`date +"%Y"` MM=`date +"%m"` DD=`date +"%d"` if [[ $MM -le 1 ]]; then YY=`expr $YY - 1` MM=12 elif [[ $MM -le 10 ]]; then MM=0`expr $MM - 1` else MM=`expr $MM - 1` fi for file in `ls aaa.+([0-9])`; do if [[ aaa.$YY$MM$DD > $file ]]; then echo "x" $file else echo "o" $file fi done

door_to_tomorrow
質問者

お礼

ありがとうございます。お礼が遅れてしまって申し訳ありません。 ソース、とても参考になりました! 月の処理が特に。0埋めするのを忘れておりました。

関連するQ&A