このワンライナーは、GNU find、xargs、およびGNU grepを使用して100%のnulファイルを見つける最も効率的な方法です。
find . -type f -size +1 -readable -print0 | xargs -0 grep -LP "[^\x00]" --
他の提供された答えに対するこの方法の利点は次のとおりです。
- 非スパースファイルは検索に含まれます。
- 読み取り不能なファイルはgrepに渡されないため、
Permission denied
警告が回避されます。
grep
null以外のバイトを検出すると、ファイルからのデータの読み取りを停止します。
- 空のファイル(ゼロバイト)は結果に含まれません。
- より少ない
grep
プロセスで複数のファイルを効率的にチェックします。
- 改行を含むパスまたはで始まるパス
-
は正しく処理されます。
- 結果
xargs
をさらに処理するために渡すことができます。
- Python / Perlを持たないほとんどの組み込みシステムで動作します。
-Z
オプションを渡し、grep
使用xargs -0 ...
すると、100%NULファイルでさらにアクションを実行できます(例:クリーンアップ):
find . -type f -size +1 -readable -print0 | xargs -0 grep -ZLP "[^\x00]" -- | xargs -0 rm --
また、find
オプション-P
を使用してシンボリックリンクをたどらないようにすることもお勧めします。-xdev
ないようにし、ファイルシステム(たとえば、リモートマウント、デバイスツリー、バインドマウントなど)の走査を回避する。
行末文字を無視するために、次のバリアントが機能するはずです(ただし、これはそれほど良い考えではないと思います)。
find . -type f -size +1 -readable -print0 | xargs -0 grep -LP "[^\x00\r\n]" --
不要なファイル(100%NUL /改行文字)を削除してバックアップされないようにするなど、すべてをまとめます。
find -P . -xdev -type f -size +1 -readable -print0 | xargs -0 grep -ZLP "[^\x00\r\n]" -- | xargs -0 rm --
空のファイル(ゼロバイト)を含めることはお勧めしません。多くの場合、非常に 特定の 目的で存在します。