質問: 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でない、データが含まれているファイルも誤って削除してしまうことです。 また、組織は変更になる可能性があるため、"/*/"にすることで対応できているか不安です。 是非アドバイスの程、よろしくお願い致します。
回答: 問題ありません。 Solaris の `find`(1) の `-exec` は `+` が使えるので、場合によっては `;` より効率的に処理できます。`;` だとファイル数だけ `rm`(1) が起動されますが、`+` なら数回で済みます。詳細はオンラインマニュアルを読んでください。 ``` $ find /path/to/target/dir -size 0c -exec rm {} + ``` 処理対象ファイルを確認したいなら `-exec` なし、あるいは `-exec` の代わりに `-ls` を指定、あるいは `rm` の前に `echo` を付ければ事前に確認できます。 ``` $ find /path/to/target/dir -size 0c ...サイズ 0 のファイルの名前一覧が表示される... $ find /path/to/target/dir -size 0c -ls ...サイズ 0 のファイルの `ls -l` 相当一覧が表示される... $ find /path/to/target/dir -size 0c -exec echo rm {} + ... `rm <サイズ 0 のファイル名一式...>` が表示される... ```