すべてのcppファイルを見つけて、名前がパターン(正規表現)と一致するファイルだけを一覧表示することは機能しません。

すべてのcppファイルを見つけて、名前がパターン(正規表現)と一致するファイルだけを一覧表示することは機能しません。

私は完全なファイルストアを持っており、特定の基準に一致するファイルのリストを取得しようとしています。

foo1たとえば、パスに文字列が含まれているかfoo2/foo3含まれていないすべてのファイルをインポートしたいとします。またはのサブディレクトリにすることができます。この場合、対応するディレクトリも必要です。bar1bar2/bar3bar1bar2/bar3foo*入らないようにする。私は以下を試しました:

IN_REGEX="$1"
OUT_REGEX="$2"

find . -name '*'.cpp | grep $IN_REGEX | grep -v $OUT_REGEX

私はこのスクリプトを次のように呼びます。

 ./script "/foo1/\|/foo2\/foo3/" "/bar1/\|/bar2\/bar3/"

ただし、ループは実行されません。"コマンドラインパラメータを'grepsを次のようにコマンドに変更してみましたsed

find . -name '*'.cpp | sed "\m%$IN_REGEX%" | sed "\%$OUT_REGEX%d"

今回も成功しませんでした。しかし、bashシェルで直接実行しようとするとgrep。うまくいきます。私はこれを調べようと今日一日中過ごした。

誰でも私を助けることができますか?

ベストアンサー1

!(否定)と-pathコマンドスイッチを使用してfindこれを行うことができます。

$ find . \( ! -path "*bar*" -a ! -path "*bar2\/bar3*" -a -path "*foo*" -print \)

barフォルダを除くフォルダとインクルードフォルダbar2/bar3のパスを検索します。foo試してみてください。構文はfindコマンドのバージョンによって変更されることがあります。

詳しくは、検索マニュアルページをご覧ください。

おすすめ記事