リストを作成したら、文字列を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(および他のほとんどのシェル)に組み込まれている構文であるため、括弧を使用して引用する必要があります。