複数のパターンに一致するパスを除外するには、[検索]を使用します。

複数のパターンに一致するパスを除外するには、[検索]を使用します。

リストを作成したら、文字列をsedに置き換えるために入れ子になったYAMLファイルとHTMLファイルを見つけようとします。その-pruneオプションの使用方法を完全に理解できませんでした。これが私が持っているものです。

find . -type f -name '*.yaml' -or -name '*.html' \
    -and -path './.git/*' -or -path '*/node_modules/*' -prune

そのために、私はまだnode_modulesディレクトリの下にHTMLファイルを取得します。

答え1

検索ツリー.gitまたは名前のディレクトリを削除するには、次のようにします。node_modules

-type d \( -name .git -o -name node_modules \) -prune

findこれにより、そのディレクトリに入ることもできなくなります(-type d必ずしも必要ではありませんが、ここでは;との対称に使用します-type f。以下を参照)。

その後、別の条件を追加すると

-type d \( -name .git -o -name node_modules \) -prune -o \
-type f \( -name '*.yaml' -o -name '*.html' \) -print

次に終わる

find . \
    -type d \( -name .git -o -name node_modules \) -prune -o \
    -type f \( -name '*.yaml' -o -name '*.html' \) -print

すべてのテストに合格したパス名に対して実行したいすべての操作を代わりに実行する必要があります-print

2 つの述語間の基本的な論理演算は-a(AND) です。

答え2

man find

findに関する詳細情報を見つけるのに最適な場所です。

これはあなたに役立ちます。

find . \
    -type f \
    '(' -name '*.yaml' -or -name '*.html' ')' -and \
    -not '(' -path './.git/*' -or -path '*/node_modules/*' ')'

括弧はbash(および他のほとんどのシェル)に組み込まれている構文であるため、括弧を使用して引用する必要があります。

関連情報