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

解決済みの質問

Solarisで0byteのファイルのみ削除したい

Solaris11.3環境です。
以下のような構成のディレクトリがあるとします。
----------------------------------------------
/var/tmp/KOTEI/END/
/var/tmp/組織コード/END/
----------------------------------------------

この配下にシステムでファイルが大量に作成されるのですが、その中には0byteのファイルも含まれます。
この0byteファイルが1ヶ月で10万個近く溜まってしまうので、シェルで自動削除しようと考えています。
ファイル名に関わらず、0byteファイルは全て削除します。


以下のようなコマンドを考えたのですが、問題ないかご意見いただけないでしょうか?

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

一番怖いのは、0byteでない、データが含まれているファイルも誤って削除してしまうことです。
また、組織は変更になる可能性があるため、"*"にすることで対応できているか不安です。


是非アドバイスの程、よろしくお願い致します。

投稿日時 - 2019-05-25 23:31:08

QNo.9620068

すぐに回答ほしいです

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

ざっと見それであっているように思えますが、そちらのシステム詳細を知らない外部の人が「大丈夫ですよ」と太鼓判を押すのは結構難しいと思います。ENDフォルダ以下にシンボリックリンクがあって無限ループするかもしれないし、通常ファイルでなくデバイスファイルがあるかもしれないし、ファイル権限がばらばらでエラーメッセージだらけになるかもしれないし…。

そういうわけで、ご自分でチェックするポイント。

1)-execでなく-okにして、しばらく回してみてよさそうなら、execに書き換えて実行する。
2)「組織は変更になる可能性があるため、"*"にすることで対応できているか」は、コマンド時移行前に
echo /var/tmp/*/END
の表示を確認する。

の2点ぐらいでしょうか。

投稿日時 - 2019-05-26 09:27:26

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

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

回答(2)

ANo.2

自分も同様の懸念が。念のため -type f 付けるのと、rm に -f 指定と \; の代りに + の方がいいような気がします。

あと "*" で E2BIG とかの心配あるなら find /var/tmp -type d -name END に対して上記 find, その場合は -exec か xargs に渡すかシェル的にループさせるかでしょうか。

投稿日時 - 2019-05-26 19:21:48

あなたにオススメの質問