วิธีการนับจำนวนบรรทัดของไฟล์ที่พบทั้งหมด


10

ฉันกำลังใช้ a find . -name patternเพื่อค้นหาไฟล์บางไฟล์และฉันต้องการรับจำนวนบรรทัดทั้งหมดในไฟล์เหล่านี้

ฉันจะบรรลุสิ่งนั้นได้อย่างไร

คำตอบ:


9

หากเวอร์ชันของคุณwcและfindสนับสนุนตัวเลือกที่จำเป็น:

find . -name pattern -print0 | wc -l --files0-from=-

ซึ่งจะให้การนับต่อไฟล์รวมกับคุณ ถ้าคุณต้องการเพียงผลรวม:

find . -name pattern -print0 | wc -l --files0-from=- | tail -n 1

ตัวเลือกอื่นสำหรับรุ่นfindที่รองรับ:

find . -name pattern -exec cat {} + | wc -l 

2
$ find . -name '*.txt' -exec cat '{}' \; | wc -l

ใช้เวลาแต่ละไฟล์และcatจากนั้นไปป์ทั้งหมดที่ผ่านการwcตั้งค่าโหมดการนับบรรทัด

หรือชื่อไฟล์แปลก ๆ ที่ยังไม่ทดลองทดสอบ:

$ find . -name '*.txt' -print0 | xargs -0 cat | wc -l

1

น่าเสียดายที่ผลลัพธ์ของ:

find . -iname "yourpattern" -exec cat '{}' \; |wc -l

แทรกบรรทัดพิเศษ ในการรับจำนวนเส้นที่เชื่อถือได้คุณควรทำ:

find . -name "yourpattern" -print0 | xargs -0 wc -l

วิธีนี้คุณจัดการช่องว่างอย่างถูกต้องรับจำนวนบรรทัดสำหรับแต่ละไฟล์และจำนวนบรรทัดทั้งหมดเร็วขึ้นและมีสไตล์ !!!


1
เช่น: หาเวลา -name " .m" -exec cat '{}' \; | wc -l ทำงานใน 4.878s และส่งคืน 227847 เป็นจำนวนบรรทัด แต่เวลาหา -name " .m" -print0 | xargs -0 wc -l รันใน 0.769s และส่งกลับจำนวนบรรทัดที่เหมาะสม 126464
g24l

1

อีกวิธีที่ง่ายต่อการค้นหาไม่ บรรทัดในไฟล์:

wc -l filename

ตัวอย่าง:

wc -l myfile.txt 

-1

ยังไม่ทดลอง แต่เกี่ยวกับสิ่งที่ชอบ:

cat `find . -name "searchterm" -print` | wc -l

สิ่งนี้จะทำงานได้ไม่ดีกับเส้นทางที่มีช่องว่างหรือตัวอักษรที่ทำให้เกิดการโค้ง
Kamil Maciorowski

-2
wc -l `find -name filename`

จะทำงานอย่างมีประสิทธิภาพ


…หรือไม่ถ้าเส้นทางประกอบด้วยช่องว่างหรือตัวอักษรที่ทำให้เกิดการโค้ง
Kamil Maciorowski

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