プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。
「コマンドの実行結果をtxtファイル出力する」という無限ループのシェルスクリプトを組んだのですが、実行結果のtxtファイルサイズがだんだん大きくなってしまうため、(「>>」ではなく「>」を使っても)「もしファイルサイズが○○以上なら、そのファイルの中身を0にする」、「その後元のループに戻す」、という命令をプログラム中に記述したい場合は如何様にすればよいでしょうか。ご教授の程よろしくお願いいたします。
なお、無限ループにはwhile文を用いています。

A 回答 (3件)

「>」を使用して実行結果を取得していても肥大化してしまうということは、ループの外でループ全体の出力をリダイレクション


しているか、一回の実行で相当量の出力があるかのどちらかだと思います。
後者であれば、No,1の回答者とおなじく「無理」という考えですね。

で、前者であればループの外ではなく、中でリダイレクトすればいいのでは?
ありがちですが、 ファイル名+日付+時間 のような形で別々のファイルを作成してしまうとか。
一回ごとで新しいファイルを作ると膨大な量のファイルを作成してしまうでしょうから、時間毎
に別ファイルを作成し、同時刻内は同じファイルへ追記とかね。

ファイル名`date +%Y%m%d%H`.txt などと表示フォーマット指定で日時時間までにすれば簡単にできると思います。
    • good
    • 0

ループに以下のように追加して削除すれば?


サイズは自分で決めてください。

find ./ -size +1M | xargs rm
    • good
    • 0

確認ですが



> を使っても大きくなる、ということは、1回のコマンドでそれだけ大量の出力がある、ということですよね?

そうだとすると、 「もしファイルサイズが○○以上なら、そのファイルの中身を0にする」は、 > とほぼ同じ意味になりますから、
無理ということになります。

・その「コマンド」側で出力ファイルの制御(先頭に戻すとか、ファイルサイズを0にするとか)する
・標準入力から読み込んで、指定したファイルに制御しつつ書き込む、というプログラムを自作する
・最終結果だけあればいいのなら、 tailコマンド
・ splitコマンドで分割
等が考えられます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!