Để đếm tất cả các thư mục bao gồm cả những cái ẩn trong một cây bắt nguồn từ thư mục hiện tại .
một trong hai
tìm thấy . -type d -printf '\n' | wc -l
hoặc
tìm thấy . -type d -printf x | wc -c
(bạn có thể thay thế bất kỳ ký tự đơn nào thay cho x
: nếu bạn chọn một ký tự đặc biệt cho trình bao, hãy nhớ trích dẫn hoặc thoát ký tự đó). sử dụng printf '\n' | wc -l
hoặc inf x | wc -c
thay vì chuyển danh sách tên tệp tới wc -l
sẽ đảm bảo số lượng là chính xác ngay cả khi có những thư mục có tên Lưu trữ dòng mới.
Cả hai lệnh bao gồm thư mục bắt đầu .
trong số đếm - nếu bạn muốn đếm nghiêm ngặt phụcác thư mục sau đó trừ 1 hoặc thêm -tối thiểu 1
tìm thấy . -mindepth 1 -type d -printf '\n' | wc -l
hoặc dùng ! -Tên .
để loại trừ .
thư mục một cách rõ ràng.
Nếu bạn muốn loại trừ các thư mục ẩn (bao gồm cả các thư mục có thể không-hidden thư mục con của ẩn), sau đó cắt tỉa họ cũ
tìm -mindepth 1 -type d \( -name '.*' -prune -o -printf x \) | wc -c
Ngoài ra, sử dụng toàn cầu đệ quy của trình bao để duyệt qua cây. Sử dụng zsh chẳng hạn
dirs=( **/(ND/) )
in $#dirs
ở đâu (NĐ/)
là vòng loại toàn cầu điều đó làm cho **/
chỉ khớp với các thư mục và bao gồm ẩn ("D
ot") - bỏ qua D
nếu bạn chỉ muốn đếm các thư mục không ẩn.
Bạn có thể làm điều gì đó tương tự trong bash:
shopt -s nullglob dotglob globstar
đặt -f -- **/
printf '%d\n' "$#"
tuy nhiên không giống như của zsh /
vòng loại, các **/
mẫu toàn cầu khớp với bất kỳ thứ gì trông giống như một thư mục - bao gồm các liên kết tượng trưng đến các thư mục.