แยกไฟล์และเรียกใช้ wc บนพวกเขา
อะไรคือสิ่งwc -l /etc/*ที่*จะขยายไปยังรายการทั้งหมดภายใน/etc/ไดเรกทอรี ดังนั้นเป้าหมายคือการแยกไฟล์และดำเนินการwcกับพวกเขา มีหลายวิธีที่จะทำเช่นนั้น
สำหรับการวนซ้ำพร้อมการทดสอบ
testคำสั่งหรือบ่อยครั้งมากขึ้นโดยย่อว่า[สามารถนำมาใช้เพื่อค้นหาว่ารายการเป็นไฟล์ปกติเช่นดังนั้น:
[ -f "$FILE" ]
ดังนั้นสิ่งที่เราสามารถทำได้คือวนซ้ำไอเท็มทั้งหมดใน/etc/และรันwcบนไอเท็มเหล่านั้นหากคำสั่งด้านบนส่งคืนจริง ชอบมาก
for i in /etc/*; do [ -f "$i" ] && wc -l "$i" ; done
หา
นอกจากนี้เรายังสามารถใช้findกับ-maxdepth, -typeและ-execธง
find /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} +
-maxdepthแจ้งให้ทราบว่าลึกลงไปในโครงสร้างไดเรกทอรีที่จะไป; ค่า 1 หมายถึงเฉพาะไฟล์ในไดเรกทอรีที่เราต้องการ
-type f บอกให้ค้นหาไฟล์ปกติหรือ (แทนด้วย-oแฟล็ก) สำหรับลิงก์ sybolic (แทนด้วยtype l) ความดีทั้งหมดนั้นอยู่ในวงเล็บซึ่ง()หนีออกมา\เพื่อให้เชลล์ตีความพวกเขาเป็นส่วนหนึ่งของfindคำสั่งแทนที่จะเป็นอย่างอื่น
-exec COMMAND {} +โครงสร้างที่นี่รันคำสั่งอะไรก็ตามที่เราให้ไว้โดย+ระบุให้นำไฟล์ที่พบทั้งหมดและสิ่งที่พวกเขาเป็นบรรทัดคำสั่ง args ไปยังคำสั่ง
ในการผลิตทั้งหมดเราสามารถส่งออกท่อได้tailเช่นนี้
$ find /etc/ -maxdepth 1 \( -type f -o -type l \) -exec wc -l {} + | tail -n 1
[sudo] password for xieerqi:
11196 total
ด้านโน้ต
ง่ายกว่าที่จะใช้wc -l /etc/* 2>/dev/null | tail -1เช่นเดียวกับในคำตอบของ LD James แต่findควรเป็นส่วนหนึ่งของนิสัยในการจัดการกับไฟล์เพื่อหลีกเลี่ยงการประมวลผลชื่อไฟล์ที่ยาก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการอ่านเรียงความวิธีจัดการกับชื่อไฟล์อย่างถูกต้อง