วิธีนับจำนวนไฟล์ในไดเรกทอรี แต่ไม่วนซ้ำ


30

คำถามง่าย ๆ ฉันแน่ใจ ฉันเห็นคำตอบที่แสดงวิธีการรวมถึงไดเรกทอรีย่อย แต่ฉันต้องการทราบว่ามีกี่ไฟล์ (ไม่ใช่โฟลเดอร์) ในไดเรกทอรีปัจจุบันเท่านั้น ขอบคุณ

คำตอบ:


60
ls -F |grep -v / | wc -l
  1. ls -F รายการไฟล์ทั้งหมดและตัวบ่งชี้ผนวก (หนึ่งใน * / => @ |) รายการ
  2. grep -v /เก็บสตริง de ทั้งหมดที่ไม่มีเครื่องหมายทับ
  3. wc -l นับบรรทัด

รายการทุกอย่างยกเว้นไดเรกทอรี

ฉันซาบซึ้งมากที่คุณแยกมันออกมาและอธิบายส่วนต่างๆขอบคุณสำหรับคำตอบในการทำงานและอธิบายอย่างดี!
bcsteeve

1
ในขณะที่คำตอบทั้งหมดแก้ปัญหาของฉันฉันเลือกมันเป็นเอกสารและง่ายที่สุดสำหรับฉันที่จะเข้าใจ แต่ขอบคุณทุกคน!
bcsteeve

15

ลองใช้ oneliner นี้:

find -maxdepth 1 -type f | wc -l

นี้เป็นสิ่งที่ดีเฉพาะไฟล์และไม่มีอะไรอื่น :-)
Thom

สิ่งนี้จะข้ามลิงก์และอุปกรณ์อักขระพิเศษ
ojblass

คำตอบทั้งหมดที่นี่ใช้งานได้ดี! ดังนั้นก่อนอื่นขอขอบคุณ ที่สอง ... ฉันจะเลือกได้อย่างไร
bcsteeve

6

ลองสิ่งนี้

ls -al | grep ^[-] | wc -l
  1. ls -al - รายการไฟล์ทั้งหมดที่มีรูปแบบรายชื่อยาว
  2. grep ^[-] - ค้นหาสตริงที่เริ่มต้นด้วย "-" ที่เป็นสัญลักษณ์สำหรับแสดงถึงไฟล์ปกติเมื่อไฟล์รายการที่มี ls -al
  3. wc -l - นับจำนวนเส้น

สิ่งที่เกี่ยวกับลิงค์อ่อน แล้วไฟล์ที่เชื่อมโยงอย่างหนักล่ะ?

ดีมากเพียงไฟล์และลิงก์ไม่มีอะไรอื่น

สำหรับซอฟต์ / ฮาร์ดลิงค์ jut แทนที่-ด้วยl
andr3w

ฉันซาบซึ้งมากที่คุณแยกมันออกมาและอธิบายส่วนต่างๆขอบคุณสำหรับคำตอบในการทำงานและอธิบายอย่างดี!
bcsteeve

2

ผมแค่อยากจะเพิ่มthom ของคำตอบเพราะผมชอบที่จะเล่นกับทุบตี นี่มันไป:

echo "Directory $(pwd) has $(ls -F |grep -v / | wc -l) files"

ร้องเป็นตัวอย่างผลของ/dataไดเรกทอรีของฉัน:

Directory /data has 580569 file(s).

และคำอธิบายของฉันตะโกน:

  1. echo double-quoted-message จะพิมพ์ข้อความที่ต้องการ
  2. $(any-desirable-valid-command)ภายในข้อความที่ยกมาสองครั้งของechoจะจะพิมพ์ผลของการดำเนินการคำสั่งที่เกี่ยวข้อง
  3. pwd จะพิมพ์ไดเรกทอรีปัจจุบัน
  4. ls -Fใช้สำหรับแสดงรายการไฟล์ทั้งหมดและตัวบ่งชี้ผนวก (หนึ่งใน * / => @ |) ไปยังรายการ ผมคัดลอกนี้จากคำตอบของทอม
  5. grep -v /เป็นคำสั่งสำหรับค้นหาข้อความล้วน-v /พารามิเตอร์จะเก็บสตริงทั้งหมดที่ไม่มีเครื่องหมายทับ (es)
  6. wc -l จะพิมพ์การนับบรรทัด

ฉันรู้ว่าคำถามนี้มีอายุ 3 ปีฉันแค่ไม่อยากจะเพิ่มคำตอบอีก


2

หากคุณtreeติดตั้งบนระบบของคุณคุณสามารถใช้คำสั่งนี้:

tree -L 1 /path/to/your/directory | tail -n 1

มันแสดงจำนวนไฟล์และไดเรกทอรีในไดเรกทอรีนั้น

-L n แสดงความลึกของการค้นหา

คุณสามารถติดตั้งกับtreesudo apt-get install tree


-3

หากต้องการนับจำนวนไฟล์ทั้งหมดที่มีนามสกุลเฉพาะคุณสามารถพิมพ์:

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