Đếm đếm tất cả các tệp trong một thư mục [trùng lặp]


198

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

Tôi có một cây thư mục thực sự sâu trên hộp Linux của tôi. Tôi muốn đếm tất cả các tệp trong đường dẫn đó, bao gồm tất cả các thư mục con.

Ví dụ, cho cây thư mục này:

/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/

Nếu tôi chuyển vào /home, tôi muốn nó trả lại bốn tệp. Hoặc, điểm thưởng nếu nó trả về bốn tệp và hai thư mục. Về cơ bản, tôi muốn tương đương với việc nhấp chuột phải vào một thư mục trên Windows và chọn thuộc tính và xem có bao nhiêu tệp / thư mục được chứa trong thư mục đó.

Làm thế nào tôi có thể dễ dàng làm điều này? Tôi có một giải pháp liên quan đến tập lệnh Python tôi đã viết, nhưng tại sao điều này không dễ như chạy ls | wchay tương tự?


Không chính xác những gì bạn đang tìm kiếm, nhưng để có được tổng số rất nhanh, nếulocate cơ sở dữ liệu của bạn được cập nhật: locate /some/path | wc -l(hoặc trên máy Mac của tôi locate -c /some/path:). Nhưng: điều này cũng sẽ đếm các tập tin /this/other/path/with/some/pathvà sẽ tự đếm các thư mục.
Arjan

Nhân tiện, đây là một vấn đề khác, nhưng có liên quan chặt chẽ (đếm tất cả các thư mục trên một ổ đĩa) và giải pháp: superuser.com/questions/129088/ Kẻ
Amanda

Câu trả lời:


340

find . -type f | wc -l

Giải thích:
find . -type ftìm tất cả các tệp ( -type f ) trong thư mục ( . ) Này và trong tất cả các thư mục con, tên tệp sau đó được in ra theo tiêu chuẩn trên mỗi dòng.

Đây là đường ống | vào wc(đếm từ) -ltùy chọn cho wc chỉ đếm các dòng đầu vào của nó.

Họ cùng nhau đếm tất cả các tập tin của bạn.


1
Điều này không giải quyết được lỗi do một vì dòng mới nhất từ findđầu ra
RobertDeRose

để đếm các thư mục CHỈ, hãy sử dụng '-type d' thay vì '-type f': D
MevlütÖzdemir

1
Khi không tìm thấy tệp nào, kết quả là1
Dylanthepiguy

47

Các câu trả lời ở trên đã trả lời câu hỏi, nhưng tôi sẽ thêm rằng nếu bạn sử dụng find mà không có đối số (ngoại trừ thư mục mà bạn muốn tìm kiếm xảy ra) như trong:

find . | wc -l

việc tìm kiếm diễn ra nhanh hơn, gần như tức thời hoặc ít nhất là đối với tôi. Điều này là do mệnh đề loại phải chạy một lệnh gọi hệ thống stat () trên mỗi tên để kiểm tra kiểu của nó - bỏ qua nó để tránh làm như vậy.

Điều này có sự khác biệt của việc trả về số lượng tệp cộng với các thư mục thay vì chỉ các tệp, nhưng ít nhất với tôi là đủ vì tôi chủ yếu sử dụng điều này để tìm thư mục nào có số lượng tệp khổng lồ mất mãi mãi để sao chép và nén chúng. Đếm các thư mục vẫn cho phép tôi tìm các thư mục có hầu hết các tệp, tôi cần nhiều tốc độ hơn độ chính xác.


1
Khi không tìm thấy tệp nào, kết quả là1
Dylanthepiguy

25

Đối với tệp:

find -type f | wc -l

Đối với thư mục:

find -mindepth 1 -type d | wc -l

Cả hai đều làm việc trong thư mục làm việc hiện tại.


1
Khi không tìm thấy tệp nào, kết quả là1
Dylanthepiguy

8

Với bash 4+

shopt -s globstar
for file in **/*
do
  if [ -d "$file" ];then
    ((d++))
  elif [ -f "$file" ];then
     ((f++))
  fi
done
echo "number of files: $f"
echo "number of dirs: $d"

Không cần gọi tìm hai lần nếu bạn muốn tìm kiếm tệp và thư mục


8

Cập nhật nhẹ cho câu trả lời được chấp nhận, nếu bạn muốn có một số lượng thư mục và như vậy

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn

1
Trên máy Mac / BSD : find $DIR -exec stat -f '%HT' {} \; | sort | uniq -c | sort -rn(Ở đây, gõ %Ttrống đối với tệp thông thường, dấu hoa thị cho tệp thực thi hoặc dấu gạch chéo cho thư mục; do đó %HTcần thiết hoặc một số văn bản bổ sung để tránh không gian không được tính, như > %T. )
Arjan

Cung cấp cho tôi "tìm: tùy chọn bất hợp pháp - e" trên mac 10.13.6 của tôi
K.-Michael Aye
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.