รับส่วนขยายทั้งหมดและจำนวนไฟล์ที่เกี่ยวข้องในไดเรกทอรี


14

รับส่วนขยายทั้งหมดสำหรับไดเรกทอรี: ง่าย รับไฟล์นับสำหรับส่วนขยายเฉพาะ: ง่าย

แต่การได้รับนามสกุลไฟล์ทั้งหมดและจำนวนไฟล์ที่เกี่ยวข้องนั้นทำให้ฉันรู้สึกแย่

เช่น.

+ dir
 + abc.txt
 + def.txt
 + abc.pdf
 * def.pov

ควรคืนบางสิ่งเช่น:

.txt 2
.pdf 1
.pov 1

จุดประสงค์ของแบบฝึกหัดนี้คือฉันต้องการค้นหาว่านามสกุลไฟล์ใดที่เป็นที่นิยมในบางไดเรกทอรี

ขอบคุณล่วงหน้า

คำตอบ:


47
/var/cache$ sudo find ./ -type f | grep -E ".*\.[a-zA-Z0-9]*$" | sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/' | sort | uniq -c | sort -n
      1 .6
      1 .cache
      1 .noconf
      1 .php
      1 .sl
      2 .bin
      2 .el
      2 .tdb
      4 .baseA
      4 .baseB
      4 .dat
      4 .DB
     27 .db
    221 .deb

นี่คือคำอธิบาย:

find ./ -type f

ค้นหาไฟล์เท่านั้นไม่ใช่ไดเรกทอรี

grep -E ".*\.[a-zA-Z0-9]*$"

ไฟล์ตัวกรองที่มีนามสกุล

sed -e 's/.*\(\.[a-zA-Z0-9]*\)$/\1/'

ลบพา ธ และชื่อไฟล์บันทึกเฉพาะส่วนขยาย

sort | uniq -c | sort -n

เรียงลำดับ uniq และเรียงลำดับ


คุณสามารถทำให้ regex ของคุณอนุญาตให้ใช้อักขระเพิ่มขึ้นในส่วนขยายและกำจัดgrepโดยทำดังนี้:sed -ne '/\.[^./]*$/s/.*\(\.[^.]*\)$/\1/p'
หยุดชั่วคราวจนกว่าจะมีประกาศเพิ่มเติม

เดนนิสการแทนที่ grep และ sed ด้วย sed ของคุณจะส่งกลับข้อผิดพลาดต่อไปนี้: sed: -e expression # 1, ถ่าน 30: การอ้างอิงที่ไม่ถูกต้อง \ 1 ในคำสั่งของ RHS คำสั่ง `s '
denormalizer

2

เนื่องจากคุณกำลังใช้ลินุกซ์ (GNU grep) นี้เป็นเวลาที่ดีที่จะใช้ Perl RES (PCRE) -Pและ grep ของ-oตัวเลือก การรับคำตอบของ @ bindbn ในฐานะผู้สมัครที่ยอดเยี่ยม:

find . -type f | grep -Po '\.([\w\d])*$' | sort | uniq -c | sort -n
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.