回答:
この-path
オプションを使用して、それを見つけて-not
演算子と組み合わせることができます。
find . ! -path "*/test/*" -type f -name "*.js" ! -name "*-min-*" ! -name "*console*"
2つのことに注意してください
-path
最初の引数として来なければなりません-path test
、何にも一致しませんちなみに、括弧を使用している理由はわかりませんが、違いはありません。これは、優先順位、たとえばなどの構造に対してのみ使用されます! \( -name '*bla*' -name '*foo*' \)
(つまり、bla
との両方を持つものは見つかりませんfoo
)。
さらに改良:bashループを使用する必要はありません。
find . ... -exec cat {} \; -exec echo \;
ここで...はに対する他の引数find
です。
find / -path ./test -prune -o ...
./test
テストディレクトリの場所に合わせて名前を変更します。
次のようなgrepを試すことができます(このフォルダーの名前はtest_folderです)。
find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | grep -v "/path/to/test_folder/" | while read line
または、検索が相対パスを返す場合:
find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | grep -v "./relative_path/to/test_folder/" | while read line
または、同じ名前でパスが異なるすべてのフォルダーが必要な場合
find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | grep -v "/test_folder/" | while read line
宜しくお願いします、
私が考えてい@CharlesClavadetscher
たことを彼の答えで拡大すること。でパスを省略すると、パスの-not -path ...
find下降が続けられます。代わりに、を使用-prune
すると、省略されたパスへの下降が停止し、高速化されます。だから次のようなことができます
find . -path '*test/*' -prune -o -type f -name "*.js" ! -name "*-min*" ! -name "*console*" -print
ファイルを検索するだけの場合は、「wholename」ではありません。 -nameは実際のファイル名をテストしますが、-wholenameはフルパスをテストします。したがって、上記の質問にテストの無視を追加します。
find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) ! -wholename "*test*"