私が発行したとき:
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はブロックとバイト以外の単位を標準化しません。)