いくつかのクラスを探したい複数の瓶があるディレクトリがあります。以下を使用して、クラスが存在するかどうかを確認するソリューションを見つけました。
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
ため、一致自体を使用することもできます(ファイルメタデータを使用して、対応するメタデータ一致の危険なしにより詳細な出力を得ることができます)。ファイル名を挿入するには、次のものがまだ必要です。jar
zip
bsdtar
grep
grep
find . -type f -name '*.jar' -exec sh -c '
for file do
bsdtar tvf "$file" "*myClass*" | grep -H --label="$file" "^"
done' sh {} +