• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:linuxのシェルでファイル名に先月以前の日付があるのを削除したい)

Linuxシェルで先月以前の日付が含まれるファイルを削除する方法

このQ&Aのポイント
  • Linuxのシェルでファイル名に先月以前の日付があるのを削除する方法を教えてください。
  • 現在、/pgsql/data/pg_log/ディレクトリには、先月以前の日付が含まれるpostgresqlのログファイルがたくさんあります。これらのファイルを削除するスクリプトを作成したいのですが、うまくいきません。
  • 文字列の大小比較や特定の位置から文字を抜き出す処理を行うためには、bashでは難しい場合があります。perlなどの他のツールを使うことを検討してみてください。

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

ファイル名でなく、タイムスタンプが30日以前で削除するなら、#1の方が書いたようにfindを使うのが良いです。 find /pgsql/data/pg_log/ -name '*.log' -mtime +30 | xargs -r rm > < の判定が失敗したのは、 if [ $file < postgresql-2010-04 ] のように書いたのではありませんか? < や > はそのまま書くとリダイレクトの記号なので、if [ $file '<' postgresql-2010-04 ] のように書かないといけません。 >12文字目から7文字抜き出したいのですが、 ${file:11:7} のように書きます。先頭を0と数えるので12文字目は11になります。 >bashでこういう事をするのはあまり向いていないのでしょうか?cshellとどちらが向いているでしょうか?あるいはパールなんかを使った方が良いのでしょうか? cshよりbashのほうが高機能です。この程度であれば、シェルで十分です。 YYYYMM=`date +%Y-%m` cd /pgsql/data/pg_log/ for file in postgresql-*.log do if [ $file '<' postgresql-$YYYYMM ];then rm $file;fi done

ngwave
質問者

お礼

ありがとうござます。 当面の事、そしてプラン的なものも分かりました。

その他の回答 (1)

noname#29459
noname#29459
回答No.1

find /pgsql/data/pg_log/ -name '/pgsql/data/pg_log/' -ctime +30 -exec rm -f {} \;

ngwave
質問者

お礼

ありがとうございます。

関連するQ&A