Mac全体で1 GBを超えるファイルを検索しようとしています。コマンドfind
はディレクトリ/System
と/System/Volumes
。
find -x / -type f -size +1G
試しましたが、何も役に立たprune
ないようです。! -path
-not -path
答え1
この試み:
find -x / -path /System -prune -or -type f -size +1G -print
私の考えでは、ブール論理を正しく作成することは、find
プログラムで最も難しいことの1つです。括弧を使用しないと、ロジックを追跡するのは簡単ではありません...そしてまったく役に立ちません。括弧のため、見苦しく、読みにくくなります。
簡単に言えば、 find について覚えておくべき鍵は、すべての述語が次のようになることです。暗黙的なAND演算OR(または)find
を使用しない限り、前の述部と一緒に使用されます。-or
-o
ANDは-and
or-a
ですが、ANDがデフォルトであるため、明示的で明確にしたくない限り、明示的にANDを使用する必要はほとんどありません。これにより、Xヶ月以内に編集する必要があり、動作を忘れたときに理解しやすくなります。たとえば、以下は上記の例と同じです。
find -x / -path /System -and -prune -or -type f -and -size +1G -print
評価方法は次のとおりです。(-path /System -and -prune) -or (-type f -and -size +1G)
したがって、上記のコマンドは-path /System
ANDedされてからORedされ、-prune
/Systemディレクトリとすべてのサブディレクトリ(したがって/System/Volumesを明示的に除外する必要はありません)が検索から除外されます。-type f
-size +1G
複数のディレクトリを除外する必要がある場合は、bashで特殊な意味(複合コマンド/サブシェルなど)を非表示にするには、エスケープまたは引用符で囲む括弧を使用してください。たとえば、
find -x / \( -path /System -o -path /somewhere -o -path /else \) -prune -o -type f -size +1G -print
この例では、-prune
ディレクトリについて(/System OR /somewhere OR /else)
これが何かを明確にすることを願っています。私は今少し眠れなかったのでよく説明したかどうかわかりません。
ところで、-x
FreeBSDの検索オプションは優れた拡張機能です。ブール論理は、標準述部を使用するとさらに-xdev
複雑になります。 (残念ながらGNU findはそうではありません-x
。しかし、FreeBSDを使ってMac上で実行しているので、それはあなたとは関係ありませんfind
)