
私は完全なファイルストアを持っており、特定の基準に一致するファイルのリストを取得しようとしています。
foo1
たとえば、パスに文字列が含まれているかfoo2/foo3
含まれていないすべてのファイルをインポートしたいとします。またはのサブディレクトリにすることができます。この場合、対応するディレクトリも必要です。bar1
bar2/bar3
bar1
bar2/bar3
foo*
入らないようにする。私は以下を試しました:
IN_REGEX="$1"
OUT_REGEX="$2"
find . -name '*'.cpp | grep $IN_REGEX | grep -v $OUT_REGEX
私はこのスクリプトを次のように呼びます。
./script "/foo1/\|/foo2\/foo3/" "/bar1/\|/bar2\/bar3/"
ただし、ループは実行されません。"
コマンドラインパラメータを'
。grep
sを次のようにコマンドに変更してみました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
コマンドのバージョンによって変更されることがあります。
答え2
パラメータを受け取るときに「ライン1とライン2」を削除すると機能するようです。
IN_REGEX=$1
OUT_REGEX=$2
find . -name '*'.cpp | grep $IN_REGEX | grep -v $OUT_REGEX