ฉันจะนับจำนวนไฟล์ (ในไดเรกทอรี) ที่มีสตริงที่กำหนดเป็นอินพุตใน 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แล้วก็นับตัวละครด้วย