Làm cách nào tôi có thể đếm số lượng thư mục trong một ổ đĩa bằng Linux?


24

Tôi cần tổ chức một ổ cứng gắn ngoài sao cho không có hơn 500 thư mục trên đó. Cửa sổ "Thuộc tính" của Ubuntu chỉ hiển thị số tập tin, không phải số lượng thư mục.

Có một dòng lệnh đơn giản sẽ cho tôi biết số lượng thư mục con?

Tôi cần phải đếm đệ quy, và ổ đĩa là ổ cứng gắn ngoài /media/MUSIC/. Đó là hệ thống âm thanh nổi trên ô tô có tài liệu cho biết nó chỉ đọc 500 thư mục đầu tiên.

Câu trả lời:


20

Điều hướng đến ổ đĩa của bạn và chỉ cần thực hiện

ls -lR | grep ^d | wc -l

Điều này dường như cung cấp một con số chính xác hơn câu trả lời tôi đã chấp nhận 3 năm trước. Nó đếm thư mục tôi đang ở trong khi điều này không được thực hiện.
Dean Thay

Tôi thấy các số khác nhau là tốt, nhưng không quá khác nhau.
XUÂN

Cá nhân tôi thích grep -chơn wc -l. Có lẽ đó chỉ là tôi.
Maxim_united

1
Ở trên sẽ vượt qua nếu bất kỳ mục nhập thư mục có chứa chuỗi \nd(trong đó \nlà ký tự NL).
Toby Speight

1
Toby là đúng, lsđầu ra không phải là đường ống . Hơn nữa, điều này sẽ chậm hơn nhiều vì nó phải xuất toàn bộ cây và sau đó chạy grep qua nó
phuclv

37

Tìm tất cả các thư mục trong tổng số, bao gồm cả thư mục con?

find /mount/point -type d | wc -l

... Hoặc tìm tất cả các thư mục trong thư mục gốc (không bao gồm các thư mục con)?

find /mount/point -maxdepth 1 -type d | wc -l

Đó là lần đầu tiên chính xác là những gì tôi sau. Cảm ơn!
Dean Thay

@Dean: yeah, tôi đã sử dụng nó để đếm các thư mục trong bộ sưu tập nhạc của tôi trước đây. :) để có quyền của braggin, hãy đếm MP3 của bạn: find / mount / point -type f | grep -i mp3 | wc -l
quixote quixote

1
@Dean: yeah, tôi không biết cú pháp find offhand, nhưng tôi thường sử dụng grep -v cho điều đó: find / mount / pt -type f | grep -vi mp3 | grep -vi wav | wc -l ... (và <i> </ i> không hoạt động trong các bình luận, sử dụng *foo*để in nghiêng: foo )
quack quixote

2
@Dean: tôi nghĩ bạn chỉ cần sử dụng find /path -not -iname '*.mp3' | wc -lđể lọc MP3 hoặc để sử dụng cả MP3 và WAVfind /path -not -iname '*.mp3' -not -iname '*.wav' | wc -l
quack quixote

1
Cần thêm -type f để nó bỏ qua các thư mục, nhưng xin chúc mừng! Tôi chỉ tìm thấy một loạt các tập tin m4a mà tôi không biết về ... Cảm ơn!
Dean Thay

4

Dòng mới là ký tự hợp lệ trong tên thư mục. Tôi đề nghị cho phép findin một dòng trống cho mỗi thư mục được tìm thấy và sau đó cho phép wcđếm những dòng đó.

find /mount/point -type d -printf '\n' | wc -l

3

Hãy thử như sau [xem bên dưới]:

ls -1 -p | grep "/" | wc -l

Điều này sẽ in một danh sách một cột của thư mục hiện tại, với dấu gạch chéo cho các mục là thư mục con, sau đó đếm các dòng có dấu gạch chéo.

EDIT: có lẽ bạn nên đi với câu trả lời của quack quixote, vì nó rõ ràng hơn một chút, nhưng tôi đã sửa lỗi của tôi (sau khi xem xét các đề xuất của quack).

ls -Rp | grep "/$" | wc -l

Cần thêm -R để đi đệ quy (xin lỗi vì không đề cập đến) và cần chỉ định đường dẫn đến ls, nhưng vâng, điều này hoạt động: ls -1 -p -R / media / MUSIC / | grep "/" | wc -l Cảm ơn!
Dean Thay

Sau khi thử cả gợi ý này và quackote quixote, tôi nhận được 2 kết quả khác nhau ... Tôi có xu hướng tin vào kết quả khác. Dù sao cũng cảm ơn bạn!
Dean Thay

1
bạn không cần -1ls sẽ phát hiện các cột và sẽ không định dạng các cột. ngoài ra, bạn có thể lấy các danh sách đệ quy với -R, nhưng sau đó bạn có thể muốn grep "/$"để chỉ khớp các dấu gạch chéo (hoặc số sẽ bị tắt). phiên bản cuối cùng:ls -Rp | grep "/$" | wc -l
quack quixote

1
các tìm phiên bản i đăng sẽ đếm .(ví dụ /mount/point) trong đếm của nó, là ls phiên bản trong bình luận trên của tôi sẽ không. các số đó khác nhau 1, tho bạn có thể sử dụng /mount/point/*trong lệnh find để sửa lỗi đó (giả sử không có thư mục dấu chấm ẩn).
quack quixote

Tôi không chắc tại sao bạn có hai kết quả khác nhau, nhưng phương pháp của @ quack sẽ bao gồm các thư mục "ẩn" (nghĩa là những thư mục bắt đầu bằng '.').
đóng thế

1

Tôi đã viết ffcnt để tăng tốc độ đếm tệp đệ quy trong các trường hợp cụ thể: đĩa quay và hệ thống tệp hỗ trợ ánh xạ phạm vi.

Nó có thể là một thứ tự cường độ nhanh hơn so với lshoặc findtiếp cận dựa trên


1

Khi có một số lượng lớn các thư mục, các công cụ như treecó thể sẽ mất vĩnh viễn để hoàn thành hoặc thậm chí treo, vì vậy bạn có thể muốn sử dụng một cái gì đó hiệu quả hơn.

Cách hiệu quả nhất để đếm các thư mục mà tôi có thể nghĩ đến sẽ là như sau, vì findsẽ chỉ in một .thư mục cho mỗi thư mục được tìm thấy thay vì đường dẫn và tên tệp đầy đủ và wcchỉ cần lặp lại số lượng ký tự:

find /mount/point -type d -printf '.' |wc -c

Để loại trừ /mount/pointchính nó khỏi tính toán và chỉ đếm các thư mục con:

find /mount/point -mindepth 1 -type d -printf '.' |wc -c

1

Tôi đã tìm thấy du --inodeshữu ích, nhưng tôi không chắc phiên bản nào của dunó yêu cầu. Trên Ubuntu 17.10, các công việc sau:

du --inodes      # all files and subdirectories
du --inodes -s   # summary
du --inodes -d 2 # depth 2 at most

Kết hợp với | sort -nrđể sắp xếp giảm dần theo số lượng nút chứa.


0

Tôi thích sử dụng cây để kéo số thư mục với

tree -d -R -fi --noreport | wc -l

Hoặc, không sử dụng find để hiển thị số lượng lớn các thư mục được đặt với

find . -type d -printf "%h\n" | cut -d/ -f-2 | sort | uniq -c | sort -rn

Hoặc một cái gì đó như: cây | grep -e '^. * thư mục,'
mindcrime 17/2/2016

-2

Để tìm số lượng thư mục và thư mục trong thư mục hiện tại

Nhập lệnh sau trong thiết bị đầu cuối của bạn

echo */ | wc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.