2017-01-09 20 views
0

だから私は、このファイル構造を持っている:私は必要なもの異なるフォルダに事前に定義されたファイル名を再帰検索

/var/www/html/website1/app/config/database.php 
/var/www/html/website2/app/config/database.php 
... 

は、すべてのdatabase.phpファイル内の特定の文字列を見つけることです、私は

grep -nrw "string" /var/www/html/*/app/config/* 

を試してみましたパスを認識していないようです。

私は後に何を達成するための方法があるのだろうかと思っています。

+0

ワイルドカードを使用してすべてのdatabase.phpファイルを指定する場合は、ディレクトリ( '-r')を使用して再帰的に検索する必要はありません。すべてのウェブサイトがそのパス構造に従うならば、 '/ var/www/html/*/app/config/database.php'の' grep "文字列で十分です。そのパス展開の結果、ファイルがゼロになった場合は、ファイル*が実際に存在する場所を指すように修正します。 – ghoti

答えて

0

find /var -maxdepth 5 -mindepth 5 -name database.php -type f | xargs grep -nrw "string"

あなたがファイル名に「newlines or or types of white space」を期待している場合:

find /var -maxdepth 5 -mindepth 5 -name database.php -type f -print0 | xargs -0 grep -nrw "string" 
+0

ディレクトリ名にスペースが含まれているとどうなりますか?最適な深度値はどのようにして決定しましたか?あなたの答えをよりよく説明できますか? – ghoti

+0

ファイル名の空白を扱うには、それぞれ 'find'と' xargs'コマンドに '-print0'と' -0'オプションを使います(私の答えに追加しました)。探しているファイルは、( '/ var')を見つけるための引数として与えられたディレクトリの下の5つのディレクトリレベルです。 – jreisinger

0

あなたを介して検索することがありますすべてのファイルは、あなたドン、あなたの質問にあるもののパターンに従います場合再帰的検索が必要な場合は、単独でグロビングすることでこれを行うことができます。 *は、末尾だけでなく、パス内の任意の場所に存在することができます(展開することもできます)。

grep -n -F -w "string" /var/www/html/*/app/config/database.php 

これは、重要と指定したパスのみを検索するという利点があります。

あなたはREではなく文字列を検索していると言われているので、-Fオプションが適切かもしれません。

これはあなたが存在しなければならないと信じていたファイルが見つからない場合、あなたはこのような何か試してみてください:あなたが実際にこのファイルの正しい場所に探していることを確認するために

find /var/www/html/*/app -name database.php -print 

を。

関連する問題