- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:linuxのシェルでファイル名に先月以前の日付があるのを削除したい)
Linuxシェルで先月以前の日付が含まれるファイルを削除する方法
このQ&Aのポイント
- Linuxのシェルでファイル名に先月以前の日付があるのを削除する方法を教えてください。
- 現在、/pgsql/data/pg_log/ディレクトリには、先月以前の日付が含まれるpostgresqlのログファイルがたくさんあります。これらのファイルを削除するスクリプトを作成したいのですが、うまくいきません。
- 文字列の大小比較や特定の位置から文字を抜き出す処理を行うためには、bashでは難しい場合があります。perlなどの他のツールを使うことを検討してみてください。
- みんなの回答 (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
その他の回答 (1)
noname#29459
回答No.1
find /pgsql/data/pg_log/ -name '/pgsql/data/pg_log/' -ctime +30 -exec rm -f {} \;
質問者
お礼
ありがとうございます。
お礼
ありがとうござます。 当面の事、そしてプラン的なものも分かりました。