プロジェクトがどのバージョンの休止状態に依存しているかを調べようとしています(これは私の質問と直交しています)。
いくつかのサブプロジェクトを持つ親プロジェクトがあり、これが1つ以上のpom.xml
で定義されていることを私は知っています。問題は、一致を出力するときに、その行だけがpom.xml
で見つかったことを示しているので、どのサブプロジェクトpom.xml
を知りたいのかということです。
grep
を取得して相対パスを出力するにはどうすればよいですか(絶対でも機能しますが、きれいではありません)?それが不可能な場合は、別の提案を歓迎します。
$ grep -rI -3 org.hibernate pom.xml
Find、xargs、grepを組み合わせて使用することをお勧めします。
cd top-dir
find . -print -name 'pom.xml' -print0 | xargs -0 grep -l pattern
-print0/-0オプションを入力して、見つかったディレクトリ内の特殊文字が保護され、適切に処理されるようにしました。
上記は、pattermに一致するtop-dirに関連するファイル名をリストします。
別の解決策は、globstar
パターン、つまり recursive glob をgrep
-H
オプションと組み合わせて使用することです。ファイル名を出力に含めます。
shopt -s globstar
grep -H org.hibernate **/pom.xml
再帰的なgrep
(-R
)とは異なり、このアプローチでは、-H
オプションは出力にファイルパスを含めます。
ヒント:再帰的なグロブを永続的に許可するには、shopt -s globstar
を.bashrc
に追加すると便利な場合があります。
grep --with-filename -rI -3 org.hibernate pom.xml
マニュアルページから:
-H, --with-filename
Print the file name for each match. This is the default when there is more than one file to
search.