ファイルの内容が破損しているかどうかを確認すると、ファイルサイズは「0」と表示されます。

ファイルの内容が破損しているかどうかを確認すると、ファイルサイズは「0」と表示されます。

非常に奇妙な状況が発生しました。さまざまなサイズのファイルを含むファイルシステムがあり、ファイルを並べ替えると破損しているように見え、何も表示されません。

このファイルがどれだけ多いかわかりません。他のすべてのファイルとまったく同じように見えます。これまで私が見つけた最良の方法は、find . -type f | xargs wc -l0を返すファイルを実行して検索することです。

ただし、これらのファイルの一部はサイズが10 GBに達し、空であってもファイルを確認するのに1分以上かかります。約5000万個のファイルを確認する必要がありますが、これはほとんど不可能です。

最大の質問は、単純な検索を実行するよりもはるかに速くこれらのファイルの内容を調べるための低レベルの方法があるかどうかです。

ベストアンサー1

そして、ファイルを検索しても何も表示されません。

cat次の実験で示すように、ファイルの出力がないということはファイルが空であるという意味ではありません。

$ truncate -s 1M foo    
$ ll foo
-rw-r----- 1 user users 1048576 Nov 15 19:28 foo
$ file foo
foo: data
$ cat foo
$ 

cat1MiBのNUL文字を出力しますが、これらの文字は端末では見えません。

空のファイルに関するあなたの質問は多少曖昧です。上記にfoo該当しますか? 「空」が長さがゼロであることを意味する場合は、find次のようにします。

find dir -type f -empty

以下の長さ0のファイルをすべて一覧表示しますdir。サポートfindしていない場合は-empty、使用できます-size 0

-s fileシェルスクリプトでは、存在し、空でない場合はtrueの式を使用できます。fileファイルが空であることを確認するには(存在すると仮定)、次のようにします。

if [ \! -s file ] ; then ... ; fi

stat(1)または、次はGNUバリアントを使用できます。

$ stat --format=%s foo
1048576

比較により、さらに使用できます。

おすすめ記事