Score:4

Count number of files with specific extension(s) for each subdirectory

ธง mx

Source: Any directory tree with any number and type of files. Q: How many .jpg or .jpg and .png (for example) are in each subdirectory?

How can I limit the code below for files with 1 or more specific extension(s)? Having trouble inserting the -type f -name "*.jpg*", for example.

for DIR in $(find . -maxdepth 99 -type d)
do
    printf "%10d\t%s\n" $(find ${DIR}|wc -l) "${DIR}" 
done

Desired output:

118   ./aaa
 73   ./aaa/bbb
 16   ./aaa/bbb/ccc

If more than one file types are counted, then their combined total number in each subdirectories should be displayed.

Liso avatar
sd flag
คุณต้องการรวมผลลัพธ์ของ `.jpg` และ `.png` หรือไม่
Score:4
ธง cn

น่าจะเป็นอันนี้ หา|xargs โซลูชันจะทำงานตามที่คุณต้องการ

หา . -ความลึกต่ำสุด 1 -ความลึกสูงสุด 99 -ประเภท d -พิมพ์0 | \
   xargs -0 -i bash -c 'printf "%10d\t%s\n" "$(ค้นหา "$1" -maxความลึก 1 -type f -regextype awk -iregex ".*\.(jpg|jpeg|png) " | wc -l)" "$1"' - '{}'

คำอธิบายบางอย่าง:

  • เดอะ - ความลึกขั้นต่ำ 1 เพิ่มตัวเลือกเพื่อข้ามไดเร็กทอรีปัจจุบันและประมวลผลเฉพาะไดเร็กทอรีย่อย
  • เดอะ -พิมพ์0 จัดเตรียมรายการเอาต์พุตด้วยตัวคั่น null ซึ่งทำงานร่วมกับ -0 ตัวเลือกของ xargs.
  • ทางเลือก - "{}" ในตอนท้ายจะผ่านการ xargs อาร์กิวเมนต์เป็นค่าของพารามิเตอร์ตำแหน่งแรก $1 ของคำสั่งทุบตี
  • ภายในวินาที หา สั่งการ -ไอร์เก็กซ์ หมายถึงนิพจน์ทั่วไปที่ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ (คุณสามารถใช้ -regex แทน).
user3026965 avatar
mx flag
สง่างาม! มีวิธีง่าย ๆ ในการระงับการแสดงรายการย่อยเหล่านั้นโดยที่การนับ = 0 หรือไม่ (เช่น ไม่มีไฟล์ที่ตรงกับ `*\.(jpg|jpeg|png)"`)
pa4080 avatar
cn flag
สวัสดี @user3026965 วิธีที่ง่ายที่สุดในการระงับบรรทัดเหล่านี้คือการเพิ่ม `| grep -Pv '^\s+0'` ที่ท้ายคำสั่ง ตัวเลือก `-P` เปิดใช้งานนิพจน์ทั่วไปแบบขยาย `-v` ระงับบรรทัดที่ตรงกัน และ regex เองก็หมายถึงบรรทัดที่เริ่มต้น `^` ด้วยช่องว่าง `+` อย่างน้อยหนึ่ง `\s` ตามด้วย `0`
Score:3
ธง sd

นี่มาจากของฉันดัดแปลงจาก คำตอบนี้.

หา . -ความลึกสูงสุด 100 -type d -print0 | ขณะอ่าน -d '' -r dir; ทำ count=$(ค้นหา "$dir" -maxความลึก 1 -type f \( -name '*.jpg' -o -name '*.png' \) -ls | wc -l); printf "%5d %s\n" "$count" "$dir"; เสร็จแล้ว

ส่งคืนสิ่งนี้ในไดเร็กทอรีทดสอบของฉัน

20 .
11 ./level2
3 ./level2/level3

เนื้อหาอยู่ที่ไหน:

$ ต้นไม้ -L 3 ระดับ 1/
ระดับ 1/
âââ 1.png
âââ 10.png
âââ 11.png
âââ 12.png
âââ 13.png
âââ 14.png
âââ 15.png
âââ 16.jpg
âââ 17.jpg
âââ 18.jpg
âââ 19.jpg
âââ 2.png
âââ 20.jpg
âââ 3.png
âââ 4.png
âââ 5.png
âââ 6.png
âââ 7.png
âââ 8.png
âââ 9.png
âââ ระดับ2
    âââ 20.jpg
    âââ 21.jpg
    âââ 22.jpg
    âââ 23.jpg
    âââ 24.jpg
    âââ 25.jpg
    âââ 26.png
    âââ 27.png
    âââ 28.png
    âââ 29.png
    âââ 30.png
    âââ ระดับ 3
        âââ bull_city.png
        âââ man_city.png
        âââ newyork_city.png

2 ไดเร็กทอรี 34 ไฟล์

หา . -ความลึกขั้นต่ำ 1 -ความลึกสูงสุด 100 -ประเภท d -พิมพ์0 | ขณะอ่าน -d '' -r dir; ทำ count=$(ค้นหา "$dir" -maxความลึก 1 -type f \( -name '*.jpg' -o -name '*.png' \) -ls | wc -l); printf "%5d %s\n" "$count" "$dir"; เสร็จแล้ว

คืนสิ่งนี้

11 ./level2
3 ./level2/level3
Score:1
ธง it

Find มีตัวดำเนินการเชิงตรรกะ เช่น AND, NOT และ OR

ในการระบุส่วนขยายเพื่อค้นหามากกว่าหนึ่งรายการ คุณต้องใส่อาร์กิวเมนต์ในวงเล็บ รวมทั้งหลีกวงเล็บเพื่อหลีกเลี่ยงการประมวลผลโดย bash:

หา . \( -ประเภท f -name "*.jpg" -o -name "*.png" \)

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา