คุณสามารถจัดเรียงเพื่อค้นหาไฟล์ทั้งหมดลบชื่อไฟล์ทิ้งบรรทัดที่มีเพียงชื่อไดเร็กทอรีสำหรับแต่ละไฟล์จากนั้นนับจำนวนครั้งที่แต่ละไดเร็กทอรีปรากฏ:
find . -type f |
sed 's%/[^/]*$%%' |
sort |
uniq -c
gotcha เดียวในนี้คือถ้าคุณมีชื่อไฟล์หรือชื่อไดเร็กทอรีที่มีอักขระขึ้นบรรทัดใหม่ซึ่งไม่น่าจะเป็นไปได้ หากคุณต้องกังวลเกี่ยวกับการขึ้นบรรทัดใหม่ในชื่อไฟล์หรือชื่อไดเร็กทอรีฉันขอแนะนำให้คุณค้นหาและแก้ไขเพื่อไม่ให้มีการขึ้นบรรทัดใหม่
หากคุณสนใจในการนับไฟล์ในแต่ละไดเรกทอรีย่อยของไดเรกทอรีปัจจุบันการนับไฟล์ใด ๆ ในไดเรกทอรีย่อยใด ๆ พร้อมกับไฟล์ในไดเรกทอรีย่อยทันทีฉันจะปรับsed
คำสั่งให้พิมพ์เท่านั้น ไดเรกทอรีระดับบนสุด:
find . -type f |
sed -e 's%^\(\./[^/]*/\).*$%\1%' -e 's%^\.\/[^/]*$%./%' |
sort |
uniq -c
รูปแบบแรกจะจับจุดเริ่มต้นของชื่อจุดเครื่องหมายทับชื่อจนถึงเครื่องหมายทับถัดไปและเครื่องหมายทับและแทนที่บรรทัดด้วยส่วนแรกเท่านั้นดังนั้น:
./dir1/dir2/file1
ถูกแทนที่ด้วย
./dir1/
การแทนที่ครั้งที่สองจับไฟล์โดยตรงในไดเร็กทอรีปัจจุบัน ./
พวกเขาไม่ได้เฉือนที่สิ้นสุดและเหล่านั้นจะถูกแทนที่โดย การเรียงลำดับและการนับจะใช้งานได้กับจำนวนชื่อเท่านั้น
./
หรือไม่?