2011-08-04 7 views
2

find私はディレクトリ構造内にワイルドカードを指定し、次にデータディレクトリ内のすべてのファイルでwww.domain.comのgrepを指定できます。 C/*/WAとの間に一つだけの可能なレベルがある場合ワイルドカードでディレクトリ構造を探す

find /a/b/c/*/WA/*/temp/*/*/data -type f -exec grep -l "www.domain.com" {} /dev/null \; 

すなわち、これは正常に動作します。

私はC/*/WAの間に複数のレベルが存在する可能性がある上で同じことをやりますか?

だから、

/a/b/c/*/*/WA/*/temp/*/*/data 

または

/a/b/c/*/*/*/WA/*/temp/*/*/data 

/c//WA/間のディレクトリのない定義された数はありませんでした。複数のレベルがあり、各レベルには/WA/*/temp/*/*/dataがあります。

どのようにそのような検索を行うためのアイデアですか?

答えて

2
そこから行く、その後、 WAディレクトリを見つけるために、 forループを使用することについてどのように

for DIR in $(find /a/b/c -type d -name WA -print); do 
    find $DIR/*/temp/*/*/data -type f \ 
     -exec grep -l "www.domain.com" {} /dev/null \; 
done 

あなたは、単一のコマンドですべてのことを得ることができるかもしれませんが、私は透明性が、より重要であると考えロングラン。その後、使用しています、これは(むしろシェルはほとんどの作業をやらせてより)ファイルを見つけるためfindを使用しています

find /a/b/c -name data -type f | 
grep -E '/WA/[^/]+/temp/[^/]+/[^/]+/data' | 
xargs grep -l "www.domain.com" /dev/null 

:その後、私はの観点から考えると思い、パスにスペースがないと仮定すると

+0

2番目の 'find'はシェルを難しくし、' data'が実際にはディレクトリ(または他の 'ファイル以外')ではなく通常のファイルであることを確認するために 'find'を使います。 –

+0

これはうまくいっているかもしれません - それが正しいかどうかチェックするだけです!ありがとう! – Mudders

+0

はい、これは正しく動作したようです!どうもありがとう! – Mudders

0

grep -Eegrepに相当)を使用して、パス内の正しいパターンの名前を選択し、xargsgrep(やはり)を使用してターゲットパターンを検索します。

関連する問題