find -nameの後にファイル名パラメータを取得します。

find -nameの後にファイル名パラメータを取得します。

いくつかのクラスを探したい複数の瓶があるディレクトリがあります。以下を使用して、クラスが存在するかどうかを確認するソリューションを見つけました。

find -name "*.jar" | xargs -n 1 jar tf | grep 'myClass'

問題は、jarそれがどこにあるかを見ることができないということです。

端末にファイル名を表示するソリューションを探しています。私の現在の出力は次のとおりです。

[user@server lib]$ find -name "*.jar" | xargs -n 1 jar tf | grep  'RollOn'  
com/ventyx/utils/logutils/rolling/RollOnDemandAppender.class

どんな提案がありますか?

ベストアンサー1

GNUの使用grep:

find . -type f -name '*.jar' -exec sh -c '
   for file do
     jar tf "$file" | grep -H --label="$file" myClass
   done' sh {} +

または、たとえば awk を使用します。

find . -type f -name '*.jar' -exec sh -c '
   export FILE
   for FILE do
     jar tf "$FILE" | awk '\''/myClass/ {
       print ENVIRON["FILE"] ": " $0}'\''
   done' sh {} +

ファイルはファイルであり、それをサポートしているbsdtarため、一致自体を使用することもできます(ファイルメタデータを使用して、対応するメタデータ一致の危険なしにより詳細な出力を得ることができます)。ファイル名を挿入するには、次のものがまだ必要です。jarzipbsdtargrepgrep

find . -type f -name '*.jar' -exec sh -c '
   for file do
     bsdtar tvf "$file" "*myClass*" | grep -H --label="$file" "^"
   done' sh {} +

おすすめ記事