Câu hỏi Đệ quy đếm tất cả các tệp trong một thư mục [trùng lặp]


Có thể trùng lặp:
Làm thế 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 vượt qua /home, Tôi muốn nó trả lại bốn tập tin. 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 kích 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 nhất làm điều này? Tôi có một giải pháp liên quan đến một kịch bản Python tôi đã viết, nhưng tại sao điều này không dễ dàng như việc chạy ls | wc hoặc tương tự?


165
2017-10-12 21:41


gốc


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ếu của bạn locate cơ sở dữ liệu đượ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 trong /this/other/path/with/some/pathvà sẽ tự tính các thư mục. - Arjan
Bằng cách này, đây là một vấn đề khác nhau, nhưng 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/… - Amanda


Các câu trả lời:


find . -type f | wc -l

Giải trình:
find . -type f tìm tất cả các tệp ( -kiểu f ) trong này ( . ) và trong tất cả các thư mục con, tên tệp sẽ được in thành tiêu chuẩn trên mỗi dòng.

Đây là sau đó đường ống | vào wc (đếm từ) -l tù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 của bạn.


289
2017-10-12 21:44





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 tìm 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

tìm kiếm diễn ra nhanh hơn nhiều, gần như tức thì hoặc ít nhất nó cũng có ích cho tôi. Điều này là do mệnh đề type 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 thư mục thay vì chỉ tệp, nhưng ít nhất với tôi là đủ vì tôi chủ yếu sử dụng để tìm thư mục nào có số lượng tệp khổng lồ mất vĩnh viễn để 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 tốc độ nhanh hơn độ chính xác.


42
2018-03-28 22:00





Đố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.


24
2017-10-12 21:56





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 phải gọi tìm hai lần nếu bạn muốn tìm kiếm các tập tin và thư mục


8
2017-10-13 01:58





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

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

7
2017-10-13 14:26



Trên một máy Mac / BSD: find $DIR -exec stat -f '%HT' {} \; | sort | uniq -c | sort -rn (Ở đây, loại %T trống đối với tệp thông thường, dấu hoa thị cho tệp thi hành hoặc dấu gạch chéo cho thư mục; vì thế %HT là cầ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