ฉันพยายามหาขวดที่มีคลาสฉันเขียนด้านล่างซึ่งดูเหมือนจะไม่ทำงาน ความคิดใด ๆ
find -type f -name "*.jar" -exec jar -tvf "{}" \| grep MyClass \; -ls
ฉันพยายามหาขวดที่มีคลาสฉันเขียนด้านล่างซึ่งดูเหมือนจะไม่ทำงาน ความคิดใด ๆ
find -type f -name "*.jar" -exec jar -tvf "{}" \| grep MyClass \; -ls
คำตอบ:
ที่ไม่ทำงานเพราะหาเรียก exec (3) โดยตรงและเป็นเช่นนี้ไม่ตีความบรรทัดคำสั่งเป็นเปลือกทำ
เมื่อฉันต้องการทำอะไรเช่นนี้ฉันมักจะโยนสิ่งที่ฉันต้องการให้ส่งเข้าไปในสคริปต์เพื่อให้ฉันสามารถทำสคริปต์ -exec {} \; อีกทางเลือกหนึ่งคือ
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
มันจะไม่ทำงานกับไดเรกทอรีที่มีช่องว่างในนั้น แต่ฉันไม่ทำในโครงการ
ฉันไม่แน่ใจว่าคุณต้องการอะไร ... นี่คือบิตของ bash ที่แสดงชื่อไฟล์ของไฟล์. jar ที่มีไฟล์. class
for f in `find *.jar`; do if jar -tvf $f | grep class &>/dev/null; then echo $f; fi; done
คุณสามารถลบ echo $f
คำสั่งและนำการปรับแต่งของคุณเองที่นั่นเช่นเดียวกับการปรับแต่ง grep
คำสั่งในนั้น
หวังว่ามันจะช่วย