

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でない、データが含まれているファイルも誤って削除してしまうことです。  
また、組織は変更になる可能性があるため、"/*/"にすることで対応できているか不安です。

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


CC BY-SA 4.0
2019-05-25T14:27:10.110
55242
2019-05-27T01:57:52.410
34457
question
solaris
Solarisで0byteファイルのみを削除するコマンドについて


問題ありません。

Solaris の `find`(1) の `-exec` は `+` が使えるので、場合によっては `;` より効率的に処理できます。`;`
だとファイル数だけ `rm`(1) が起動されますが、`+` なら数回で済みます。詳細はオンラインマニュアルを読んでください。

[code]

    $ find /path/to/target/dir -size 0c -exec rm {} +
    
[/code]

処理対象ファイルを確認したいなら `-exec` なし、あるいは `-exec` の代わりに `-ls` を指定、あるいは `rm` の前に `echo`
を付ければ事前に確認できます。

[code]

    $ 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 のファイル名一式...>` が表示される...
    
[/code]


CC BY-SA 4.0
2019-05-27T01:57:52.410
55272
2019-05-27T01:57:52.410
3061
55242
answer