Macでfindコマンドを使用して/ディレクトリを検索するときは、/ Systemディレクトリを除外できません。

Macでfindコマンドを使用して/ディレクトリを検索するときは、/ Systemディレクトリを除外できません。

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は-andor-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 /SystemANDedされてから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)

これが何かを明確にすることを願っています。私は今少し眠れなかったのでよく説明したかどうかわかりません。

ところで、-xFreeBSDの検索オプションは優れた拡張機能です。ブール論理は、標準述部を使用するとさらに-xdev複雑になります。 (残念ながらGNU findはそうではありません-x。しかし、FreeBSDを使ってMac上で実行しているので、それはあなたとは関係ありませんfind

おすすめ記事