こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

シェルスクリプトについて教えてください

以下のようなフォルダ構成があります。

/var/tmp/組織コード/log

このlogディレクトリ配下に0byteのファイルがたくさんあり、それを全て定期的に削除したいと思っています。
また、同ディレクトリにはそれ以外のファイルやフォルダも入っていて、それらは絶対に削除してはいけないものです。

以下のようなコマンドを考えたのですが、なにか懸念される点はあるでしょうか?
find /var/tmp/*/log -size 0c -exec rm {} \;

いろいろ調べたのですが、Linux系は初心者のため、これで妥当かどうか不安なのです。
環境はSolaris11で、bashです。
「組織コード」の部分を固定値にしてコード数分コマンドを書けば確実だとは思いますが、組織コードが増えたり変わるたびにシェルにもメンテが必要になるので、イマイチだと思っています。

詳しい方、ぜひアドバイスしていただけないでしょうか。
よろしくお願いします。

投稿日時 - 2017-11-06 22:21:44

QNo.9394468

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.5

#3の方へ

rm -f `find /var/tmp/*/log -size 0c`

だと書かれているようにエラーになることありますが質問に書かれている

find /var/tmp/*/log -size 0c -exec rm {} \;

は一致するファイルが多数あってもエラーにはなりませんよ。
まとめてrmではなくて1つづつrmで削除ですから。

投稿日時 - 2017-11-08 03:30:23

ANo.4

-type f と -?time 付けた方が少しは気休めかな。日数は適当。今さっき open() したばかりのファイル消さなければいい。ファイル名に規則性があるなら -name

find /var/tmp/*/log -size 0c -type f -mtime +2 -atime +2 -exec rm -f '{}' +

/var/tmp が不適切というのは同感。絶対というからには /var/log や専用ディレクトリに残すべきでしょう。

あと Solaris は Linux 系じゃないので、GNU 拡張受けつけないコマンドもあるので注意。単純にどっかのサイトから Linux コマンド引っぱってくると、エラーしたりオプションの挙動が違うことはある。

投稿日時 - 2017-11-07 16:43:40

ANo.3

基本的にそれで良いと思いますが、私はそうしません。

rm コマンドの後に消すファイルを書きますが、その数には何個までか知りませんが上限があります。

上限超えると Argument list too long とエラー吐きます。

なので find の条件に合致したファイルが多数あるとそのやり方ではコケます。

それを避けるために xargs  を使います。
find /var/tmp/*/log -size 0c |xargs -i rm -f '{}'

であってるかな??記憶で書いたので、正しい使い方は調べてくださいw

投稿日時 - 2017-11-07 13:26:22

ANo.2

/var/tmpの下に組織コードしかないのであればそのスクリプトでもいいのですが、/var/tmpはいろんなシステムが使っていますのでOS上の重要なプロセスが使っている可能性があり、怖い気がします。実際、手元のLinuxで調べたところ、6つのフォルダがありました。solarisでどうなのかは分かりませんが。

長さが0だからどんなものでも消していいかというと、そうは言い切れません。ロックファイル(0バイトであることが多い)だったりするとログが吹っ飛ぶなど思わぬ副作用もありそうです。

>組織コードが増えたり変わるたびにシェルにもメンテが必要になるので

とおっしゃっていますが、シェルに書き込むのではなく組織コードを記したファイルを別途用意してシェルスクリプトから読み込むような仕様にしたらいいのではないでしょうか。組織コード表ならほかの業務でも使うでしょうから。

投稿日時 - 2017-11-07 00:03:52

ANo.1

ファイル名に空白が含まれないという普通の前提の下ではそれでいいです。

質問内容とは関係ないですが、消してはいけないファイルを /var/tmp の下に置くのは間違っています。まあ、勝手に消えたりはしませんが。

投稿日時 - 2017-11-06 23:09:09

あなたにオススメの質問