web-dev-qa-db-ja.com

Find Execステートメント内のパイプを使用してください

どの瓶にクラスが含まれているのを見つけようとしています、私は以下を書いています、それはどんなアイデアにも関わらないようですか?

 find -type f -name "*.jar" -exec jar -tvf "{}" \| grep  MyClass \; -ls
 _
3
Charbel

これは動作しません.Calls Exec(3)を直接見つけてください。そのため、コマンドラインをシェルとして解釈しません(パイプを設定するため)。

私がこのようなことをする必要があるとき、私は一般的に私がスクリプトに配管したいものを投げてください。もう一つのオプションです

find . -type f -name "*.jar" -exec sh -c "jar -tvf '{}' | grep  MyClass" \; -ls
 _

FWIW、私の個人的なfindclassinjarです

 for x in `find . -name "*.jar" -o -name "*.Zip"` ; do if unzip -l $x | grep -q $1 > /dev/null ; then echo $x ; fi ; done
 _

それは彼らの中のスペースを持つディレクトリとは機能しませんが、プロジェクトではそうしないでください。

1
Alan Shutko

私はあなたが欲しいものをかなりよくわからない......Classファイルを含む.jarファイルのファイル名を表示する少しのbashです。

_for f in `find *.jar`; do if jar -tvf $f | grep class &>/dev/null; then echo $f; fi; done
_

_echo $f_ステートメントを取り外して、それでもgrepコマンドをカスタマイズするだけでなく、独自のカスタマイズを行うことができます。

それが役に立てば幸い。

0
BenjiWiebe