Ubuntu

grepで拡張子を指定して再帰的に検索

WordPressで画像が表示されずに困っていて、blogs.dirというディレクトリを取り扱っている箇所を探そうとした。

$ grep -r blogs\.dir *.php

見つからない。そんなはずはないが…



広告


検索の仕方

結論からすると、この書き方で検索ができた。

$ grep -r blogs\.dir --include=*.php

※検索したいのは blogs.dir という文字列で、拡張子が php のファイルを検索の対象にする。

wp-includes/ms-default-constants.php にこれを取り扱う処理が書かれていることを見つけられた。
環境はUbuntu 22.04だったが、Ubunt 18.04で試しても同じ結果になった。

やってみたこと

結局、コマンドへの引数の渡し方が間違っていることが分かる。
Super User / grep does not recurse for files with a specific extension

これを見ながら、渡したパラメーターで何が起きているのかを考えてみる。
シェルの展開機能が影響していた。

拡張子の指定なし

拡張子を指定しなければ、再帰的に検索ができる。
だが、WordPressのディレクトリなので、画像や動画などが大量に含まれており、検索にとても時間が掛かる。

$ grep -r blogs\.dir *

何が起きているのかだけれども、これって恐らくは * がファイル名に展開されている。

$ echo *
favicon.ico index.php license.txt readme.html wp-activate.php ... wp-includes ...

※長いので省略。

この場合は、wp-includesというディレクトリも指定されたことになって、-rが働いて、サブディレクトリが検索される。

拡張子の指定あり

拡張子を指定すると、再帰的な検索ができない。

$ grep -r blogs\.dir *.php

でも実際には、再帰的な検索ができないのではなく、ディレクトリが検索対象になっていないだけ。
*.phpという指定なので、当然wp-includes等のディレクトリは展開されず、検索対象にならない。

$ echo *.php
favicon.ico index.php license.txt readme.html wp-activate.php ...

※長いので省略。

これを確かめるために、wp-includesをwp-includes.phpに変更してみた。
これで検索ができた。

$ sudo mv wp-includes wp-includes.php
$ echo *
favicon.ico index.php license.txt readme.html wp-activate.php ... wp-includes.php ...

※長いので省略。

grepに対して正しくパラメーターを渡すことができていなかった、ということがはっきりした。

includes指定

*をgrepコマンドに渡すためには、includesというオプションが使える。
(excludeで除外するファイルを指定することもできるようだ)

includesについても、指定の仕方に注意が必要ではある。
指定の仕方を間違えると、*が展開されてしまう。

$ echo --includes=*.php
--includes=*.php

$ echo --includes \*.php
--includes *.php

$ echo --includes *.php
--includes index.php wp-activate.php wp-blog-header.php wp-comments-post.php ...

※長いので省略。

grepコマンドに正しく *.php を渡すためには、シェルに * が展開されないような渡し方をする必要がある。

ということで、*を*のままで渡すことができれば良いのだから、冒頭に書いた、

$ grep -r blogs\.dir --include=*.php

は、

$ grep -r blogs\.dir --include \*.php

と指定しても動く。

さいごに

前々から気になっていたのに、ちゃんと理解しないままに使っていて、WordPressはどこでblogs.dirを操作しているのか分からなかった。
検索、検索…これじゃない、あれじゃない、と時間をかなり無駄に溶かしてしまった。

気になったことは、その時にちゃんと確認して答えを出しておくべきだった…

広告

コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他