私のシステムでは、サイズが数ギガビットを超えるすべてのファイルを見つけたいと思います。私は使用すると思いましたが、find -size
マニュアルページには次のように記載されています。
サイズは間接ブロックを計算しません。
私が正しく理解した場合、検索はサイズが
(number of direct blocks)×(size of a block) = 10*4096 = 40MiB
。では、この値より大きいファイルをどのようにリストしますか?
編集する:マニュアルページでサポートしているので、どこか間違っているようです。ギガビットサイズ単位で。誰が私がどこに間違っているのかを見ることができますか?これを反映してタイトルが変更されました。
ベストアンサー1
このリンクから状況が明確になると思いましたが、オープングループ基本仕様7号、IEEE Std 1003.1、2013エディション。以下はfind仕様から抜粋したものです。
仕様検索から抜粋
-sizeオペランドは、ファイルシステムで占有できるブロック数ではなく、ファイルサイズを表します。目的は、POSIX.1-2008システムインタフェースボリュームで定義されているst_sizeフィールドを、過去の実装で見つかったst_blocksの代わりに使用する必要があることです。少なくとも2つの理由があります:
System V および BSD では、 find は POSIX.1-2008 ボリュームで指定されたオペランドのサイズ計算にのみ st_size を使用します。 (BSDは-lsマスターノードを処理するときにst_blocksのみを使用します。)
ユーザーは通常、ファイルサイズをバイト単位で考えます。これは、lsユーティリティが-lオプションの出力に使用する単位でもあります。 (System VとBSDでは、lsは-lオプションサイズフィールドとしてst_sizeを使用し、ls -s計算にはst_blocksを使用します。POSIX.1-2008のこのボリュームはls -sを指定しません。)
このセクションを正しく理解すると、最初のセクションでは「-sizeオペランドはファイルサイズを表します」と言います。したがって、st_blocksの代わりにst_sizeを評価すると、サイズが報告されます。
はい
したがって、次のコマンドを使用できる必要があります。
# find files over 1G in size
$ find / -type f -size +1G
# find files smaller than 1G in size
$ find / -type f -not -size +1G