2017-12-07 18 views
0

textearchファイルのグロブパターンをファイル検索の入力として使用するにはどうすればよいですか?検索のためにファイルに保存されたゴルベットパターンを使用する - bash

テキストファイルに格納されているグローバルパターンに一致するファイルのすべてのサブディレクトリを検索します。グローバルなパターンで ファイルには、次のようになります。

私はbashで findコマンドの入力として、そのファイルを使用することができます
/Dongle/src/*.c 
/App/files/**/*.xml 
... 

modelFile=$1 

root="Project/" 
regexes=$(cat $modelFile) 
outFile="out.txt" 

for re in $regexes; do 
    find $root -type f -regex $re > $outFile 
done 

しかし、それはすべてのファイルと一致しません:私はこれまで試したどのような

です。

(...) 
for re in $regexes; do 
    find $root -type f -regex "/App/files/**/*.xml" > $outFile 
done 
for re in $regexes; do 
    find $root -type f -regex "/Dongle/src/*.c " >> $outFile 
done 

私は必ずしもfindを使用する必要はありません:それは、私はそれが好きで使用している場合は動作します。他のすべてのbashコマンドも同様に動作します。

出力は、グロブパターンに一致するすべてのファイルである必要があります。

+0

$ reを二重引用符で囲み、何が起こるか見ることができますか? –

+1

これらは正規表現ではなく、グロブパターンです。 –

+0

もし私が$ root -type f -regex \ "$ re \"を見つけたら、どちらも動作しません@MatiasBarrios – Itaipu

答えて

3

これらは正規表現ではありません、これらはglobパターンです。

さらに、findはあなたのシェルがglobstarnullglob拡張をサポートするかどうかをパターン以来自体は、直接シェルによって 解決可能である必要があり、マッチを見つけるために非常に効果的ではないであろう。

shopt -s globstar nullglob 

while read glob; do 
    for path in $glob; do 
     echo "$path" 
    done 
done < "$modelFile" > "$outFile" 

あなたの元のコードと他のいくつかの重要な問題:同じファイルへのループで>

  • リダイレクトをいつものように使用し、二重引用符変数で囲むすべての反復
  • 上のファイルを上書きしますコマンドライン引数
  • forループの代わりにwhileループを使用して行単位で入力する
+0

ありがとうございました。あなたのコードは私の問題のために '>'を '>>'に置き換えて出力をファイルに追加したときに働いていました。 – Itaipu

関連する問題