質問: 以下のようなフォルダ構成があります。 ``` /var/tmp/組織コード/log ``` このlogディレクトリ配下に0byteのファイルがたくさんあり、それを全て定期的に削除したいと思っています。 また、同ディレクトリにはそれ以外のファイルやフォルダも入っていて、それらは絶対に削除してはいけないものです。 以下のようなコマンドを考えたのですが、なにか懸念される点はあるでしょうか? ``` find /var/tmp/*/log -size 0c -exec rm {} \; ``` いろいろ調べたのですが、Unix系は初心者のため、これで妥当かどうか不安なのです。 環境はSolaris11で、bashです。 「組織コード」の部分を固定値にしてコード数分コマンドを書けば確実だとは思いますが、組織コードが増えたり変わるたびにシェルにもメンテが必要になるので、イマイチだと思っています。 詳しい方、ぜひアドバイスしていただけないでしょうか。 よろしくお願いします。
回答: まず、SolarisとLinuxは全く異なるオペレーティングシステムです。使用しているオペレーティングシステムがなんであるかを正しく把握しておく必要があります。 次に使用する`find`ですがOS付属のもの以外にGNU find等の後からインストールされたものが用意されている場合があります。どの`find`を使用するかを把握し、適切なマニュアルを参照する必要があります。不用意な依存関係を排除する意味でも`/usr/bin/find`とパスを明示することでOS付属のものを使用するのも一つの手です。 ``` /usr/bin/find /var/tmp/*/log -size 0c -exec rm {} \; ``` でおおよそ問題ありません。どのような結果になるかを確認するために ``` /usr/bin/find /var/tmp/*/log -size 0c -exec echo rm {} \; ``` のように`echo`を加えて動作確認をするのも一つの手です。 伽語蓮弥さんがコメントにて`-empty`や`-delete`を提案されていますが、Solarisのfindマニュアルを参照する限りそのような機能は言及されていないので意図通りには動作しないかもしれません。`+`については使用できます。GNU findであればいずれの機能も存在します。