
linuxのシェルでファイル名に先月以前の日付があるのを削除したい
bashでcshellでも良いのですが、
/pgsql/data/pg_log/
の下にたまったlog
postgresql-2010-04-01-*.log
postgresql-2010-03-31-*.log
postgresql-2010-03-30-*.log
などのうち、
先月以前の日付があるのを削除するスクリプトを作りたいのですが、上手くいきません。
ls postgresql*.logから全件数回して、if文で比較しようとしましたが、判定がうまくいきません。
何がネックになっているかと言いますと、
文字列「postgresql-2010-04-01-*.log」
文字列「postgresql-2010-04」をif文で比較すると、=の判定はできますが、
>や<で判定すると、全てthenになってしまいます。
文字の大小比較はできないようですね?
また、
「postgresql-2010-04-01-*.log」
から、12文字目から7文字抜き出したいのですが、
substrのような事も出来るのかどうなのか分かりません。
bashでこういう事をするのはあまり向いていないのでしょうか?
cshellとどちらが向いているでしょうか?
あるいはパールなんかを使った方が良いのでしょうか?
当面のやりたい事をクリアする方法、および、ツールの選定についてご教授下さい。
以上、よろしくお願いします。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux Kali Linuxで起動できない - Minimal BASH Like Line Editing 1 2022/06/03 13:14
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- PostgreSQL PostgreSQLで"pg_dumpall -f data.sql"を使ってバックアップしたデータ 2 2022/09/19 08:14
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- 数学 回答者どもがなかなか答えられないようなので、考えてみました。 ∫[0,π/2]log(sinx)/( 4 2022/08/31 16:30
- Excel(エクセル) エクセルの日付から年末尾2桁と月を1月をA~Lに変換したい 3 2022/08/08 10:32
- 数学 微分方程式の積分定数について 5 2023/07/13 08:39
- 英語 英文添削依頼_お礼のメール 1 2022/12/13 11:36
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel VBA】10進数を2進数に...
-
printfの%eで指数部分の桁数を...
-
Excel VBA グラフ作成のとき...
-
ファイルから読み込むC言語の問題
-
c言語での wavファイルの編集(...
-
プロシージャ名の変数にカウン...
-
open2 他プロセスと双方向でデ...
-
マクロ登録したピボットが重い...
-
UTF-8で5~6バイトになる文字コ...
-
バイト列とバイナリ列の違いが...
-
pythonにCでのexternはありますか
-
DataGridViewの特定列に入力さ...
-
10Mバイトて文字数に すると何...
-
Excel 1セル当りの文字数が2...
-
全角半角を調べるライブラリ関...
-
COBOLのCOMP形式について
-
エクセルシート名の制限を変更...
-
CGIを勉強しています。¥n(改...
-
バイナリとBCDコード
-
GETメソッドとPOSTメソ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
printfの%eで指数部分の桁数を...
-
stable diffusionのエラー
-
int型(2バイト)データの分割
-
CreateProcessでの環境変数の設...
-
【Excel VBA】10進数を2進数に...
-
エクセルVBA:日付データの変換...
-
C#でのswitch文
-
Excel VBA グラフ作成のとき...
-
ポインター引数の関数でコンパ...
-
C言語でのLinuxとwindows共通の...
-
C言語の構造体にてバブルソート...
-
sort関数でひらがなとカタカナ...
-
VisualBasicでレジストリキーの...
-
構造体のソートの方法について...
-
RegQueryValueExでの2バイト文字
-
'dataType' 引数を Null にする...
-
ActivePerlでSMTPプロトコルで...
-
POSTで配列のデータを渡す方法は?
-
min_elementの三番目の引数
-
c言語の多次元配列で1から100ま...
おすすめ情報