ใช้ไพพ์ภายในคำสั่ง find exec


3

ฉันพยายามหาขวดที่มีคลาสฉันเขียนด้านล่างซึ่งดูเหมือนจะไม่ทำงาน ความคิดใด ๆ

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

คำตอบ:


1

ที่ไม่ทำงานเพราะหาเรียก 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

มันจะไม่ทำงานกับไดเรกทอรีที่มีช่องว่างในนั้น แต่ฉันไม่ทำในโครงการ


0

ฉันไม่แน่ใจว่าคุณต้องการอะไร ... นี่คือบิตของ 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 คำสั่งในนั้น

หวังว่ามันจะช่วย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.