質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

2回答

3897閲覧

[Linux]31日より以前のyyyy-MM-dd.logファイルを消せるコマンドを知りたい

k499778

総合スコア599

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2018/09/25 14:08

現在logファイルの管理をしているのですが、あるバッチを叩くと
31日より以前のyyyy-MM-dd.logファイルを消したいです。
logファイルの保存期間を30日としたいので。

アクセスした日からや修正した日から31日ではなくて、ファイル名で判断します。
本日2018-09-25なのでバッチを叩くと2018-08-25.log,2018-08-24.logは削除され、2018-08-26.log
は残ります。

-d '2 day ago'を使うと日付の計算ができるは知っているのですが、31日前のファイルだけでなく、31日以前のファイルも消すやり方が知りたです。
rmコマンドを使って消せることは知っています。

ご教授のほど宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

yyyy-MM-dd.logというファイル名であれば、31日前の日付のyyyy-MM-dd.logと文字列として比較して、より小さいファイル名のものを消せば良いです。
if [[ ~ < ~ ]]で、文字列としての比較が出来ます。

投稿2018/09/25 14:22

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k499778

2018/09/25 23:24 編集

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

2018/09/25 19:32

この書き方で明日確認してみます! アドバイス頂きありがとうございます
otn

2018/09/26 11:20 編集

多分それでいけると思います。 私が考えていたのは下記です。 cd 目的dir DELDAY=`date --date '30 days ago' '+%Y-%m-%d.log'` for file in *.log do if [[ $file < $DELDAY ]] then rm $file fi done
k499778

2018/09/26 09:17

それも試してみたいと思います。ありがとうございました!
guest

0

こんな漢字で、

bash

1$ ls -1 *.log 22018-08-23.log 32018-08-24.log 42018-08-25.log 52018-08-27.log 62018-08-29.log 7$ d=`date -d '30 days ago' '+%Y-%m-%d'`.log;ls *.log|grep -E '^[0-9]{4}(-[0-9]{2}){2}.log$'|while read f;do [[ $f < $d ]]&&echo $f;done 82018-08-23.log 92018-08-24.log 102018-08-25.log 11$ d=`date -d '30 days ago' '+%Y-%m-%d'`.log;ls *.log|grep -E '^[0-9]{4}(-[0-9]{2}){2}.log$'|while read f;do [[ $f < $d ]]&&echo $f;done|xargs rm 12$ ls -1 *.log 132018-08-27.log 142018-08-29.log

投稿2018/09/25 22:36

hichon

総合スコア5737

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k499778

2018/09/26 09:17

ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問