「find -size -1G」がファイルを見つけられないのはなぜですか?

「find -size -1G」がファイルを見つけられないのはなぜですか?

私が発行したとき:

find / \( -type f -size +10M \) -and \( -type f -size -1G \)

ただし、次のように入力すると結果はありません。

find / \( -type f -size +10M \) -and \( -type f -size -1000M \)

いくつかのファイルを返します。

何が問題なの?測定装置の両側で異なる測定単位を使用できませんか-and

ベストアンサー1

-and問題は、演算子に関連するのではなく、パラメータの直感的でない構文に関連しています-size。引数は、指定された単位の最大サイズではなく、計算を実行する最大数と単位です。このテストは-size -1k「1kB未満」を意味するのではなく、「kB数(丸め)が1未満(および等しくない)」を意味します。したがって、サイズが0のファイルのみが一致し、等も-size -1k同様です。-size -1M-size -1G

30バイト以下のファイルを2つ一致させるには、または-size -2G-size -1025Mを使用します(-2G等しくないことを確認-2048M)。または、「このサイズよりはるかに大きい」という意味の! -size +1Gサイズ修飾子と一緒に - を使用してください。+2 30 -1バイト以下のファイルを一致させるには-size -1073741824c

私がそんなに奇妙だと思うのは、ブロックを計算することとの歴史的互換性によるものです。たとえば、7.5ブロックを占めるファイルは実際には8ブロックを占有し、最後のブロックは埋められないため、丸めは意味があります。つまり、「7ブロック以下を占める」という意味です。ユニットを追加することは、ユニットをブロックサイズにするのと同じであるため、「7kB以下を占める」という意味です。-size -NUMBERUNIT-size -NUMBER-size -8-size -8k

(この回答はGNU findに関するものです。他のいくつかの実装は動作が異なり、POSIXはブロックとバイト以外の単位を標準化しません。)

おすすめ記事