ฉันจะนับจำนวนไฟล์ (ในไดเรกทอรี) ที่มีสตริงที่กำหนดเป็นอินพุตใน bash / sh ได้อย่างไร?
ฉันจะนับจำนวนไฟล์ (ในไดเรกทอรี) ที่มีสตริงที่กำหนดเป็นอินพุตใน bash / sh ได้อย่างไร?
คำตอบ:
grep -l "string" * | wc -l
จะค้นหาคำว่า "string" ในเนื้อหาของไฟล์ทั้งหมดในไดเร็คทอรี่สำหรับใช้ทำงานและบอกคุณว่ามีจำนวนเท่ากัน
grep -lr "string" directory | wc -l
หากคุณไม่ต้องการการค้นหาแบบเรียกซ้ำคุณสามารถใช้ find ด้วยตัวเลือก maxdepth: find directory -maxdepth 1 -type f -exec grep -l "string" {} + | wc -l
โปรดทราบว่าตัวเลือกที่สองนี้ช้ากว่า grep
grep
พารามิเตอร์ s -l
จะส่งออกชื่อไฟล์ที่มีการจับคู่$PATTERN
เท่านั้นที่wc
สามารถนับได้ในภายหลัง
grep -l "$PATTERN" * | wc -l
awk '/pattern_to_look_for/ {s+=1; nextfile;} END {print s}' *
การชี้แจง: นี่เป็นการค้นหาจำนวนไฟล์ที่มี "pattern_to_look_for" ในเนื้อหาของพวกเขาและไม่อยู่ในชื่อไฟล์ (เช่นคำตอบของ Wag) จากคำถามของคุณมันยากที่จะบอกสิ่งที่คุณกำลังมองหา
find . ! -name . -prune -type f
(อย่าพลาด backticks) คำสั่งนี้แสดงรายการไฟล์ในโฟลเดอร์เท่านั้น
สิ่งนี้ใช้ได้ใน Bash กับชื่อไฟล์ใด ๆ :
grep -lZ "$pattern" * | tr -cd '\000' | wc -c
คำอธิบาย:
grep
's -Z
ตัวเลือกพิมพ์ผลกับทุก␀ไบต์คั่น อักขระนี้ไม่สามารถเป็นส่วนหนึ่งของชื่อไฟล์ได้ดังนั้นเราสามารถนับจำนวนตัวคั่นเพื่อรับจำนวนไฟล์tr
␀ไบท์โดยใช้wc
แล้วก็นับตัวละครด้วย