Có giới hạn nào cho việc có nhiều tệp trong một thư mục trong Mac OS X không?


9

Tôi có hơn 100.000 tệp trong một thư mục trong MacOS X của tôi và có vẻ như kịch bản của tôi chậm đọc tệp trong đó.

Có bất kỳ giới hạn hoặc khuyến nghị để có nhiều tập tin? Tôi có nên chia chúng vào một số thư mục?

Hạn chế tôi tìm thấy là tôi không thể mv * foocho tất cả 100.000 tệp. Nó hiển thị một lỗi, nói "đối số quá dài." Nó hoạt động với khoảng dưới 20.000 tập tin.


Hiện tại tôi có 380.000 tệp trong một thư mục và nhận ra rằng ngay cả việc mở tệp chỉ mất hơn 10 giây. Tôi đã quyết định tách chúng ra một số thư mục.
Mật ong Daisuki

1
Hệ thống tệp HFS + có thể lưu trữ và truy cập số lượng lớn tệp trong một thư mục bằng tên đầy đủ của chúng mà không gặp quá nhiều khó khăn. Nhưng bạn cần coi chừng với các ký tự đại diện. Khi bạn sử dụng *hoặc ?là một phần của đối số cho lệnh, hệ điều hành sẽ tìm kiếm toàn bộ thư mục để tìm các tệp phù hợp (chậm) và sau đó nó thay thế đối số của bạn bằng danh sách mọi tệp phù hợp (sau đó) chuyển đến chỉ huy. Bạn có thể làm tốt hơn với một vòng lặp hoặc với một số lệnh mv, ví dụ : mv a* foo && mv b* foo.
Matthias Fripp

Câu trả lời:


1

Theo câu trả lời Stack Overflow này và các chi tiết cụ thể trên trang web của Apple , một thư mục riêng lẻ có thể chứa tới 2,1 tỷ mục.

Điều đó nói rằng, chỉ vì nó có thể chứa tới 2,1 tỷ mặt hàng không có nghĩa là nó có thể duy trì hiệu suất ở mức đó. Theo Wikipedia ; nhấn mạnh là của tôi:

Tệp Danh mục, lưu trữ tất cả các bản ghi tệp và thư mục trong một cấu trúc dữ liệu, dẫn đến các vấn đề về hiệu năng khi hệ thống cho phép đa nhiệm, vì mỗi lần chỉ có một chương trình có thể ghi vào cấu trúc này, có nghĩa là nhiều chương trình có thể đang chờ trong hàng đợi do một chương trình "ăn cắp" hệ thống. Đây cũng là một vấn đề đáng tin cậy nghiêm trọng, vì thiệt hại cho tệp này có thể phá hủy toàn bộ hệ thống tệp.

Vì vậy, hiệu suất bị suy giảm một cách tự nhiên nhờ thực tế tệp danh mục chỉ có thể được sử dụng bởi một chương trình tại một thời điểm. Và nếu thư mục tăng kích thước, rủi ro / xuống cấp do vấn đề đó sẽ chỉ leo thang; nhiều tệp hơn có nghĩa là nhiều cơ hội hơn cho các chương trình truy cập các tệp trong một thư mục đó. Xác nhận thêm về ý tưởng đó ở đây ; một lần nữa nhấn mạnh là của tôi:

Các tập tin danh mục là một cấu trúc phức tạp. Bởi vì nó giữ tất cả thông tin tệp và thư mục, nó buộc tuần tự hóa hệ thống tệp không phải là một tình huống lý tưởng khi có một số lượng lớn các luồng muốn thực hiện I / O tệp. Trong HFS, mọi thao tác tạo tệp hoặc sửa đổi tệp theo bất kỳ cách nào đều phải khóa tệp danh mục, điều này ngăn các luồng khác truy cập ngay cả chỉ đọc vào tệp danh mục. Quyền truy cập vào tệp danh mục phải là một người viết đơn / đa mục.


Cám ơn rất nhiều. Tôi hiểu rằng việc truy cập vào tệp danh mục sẽ là nút cổ chai và nó có thể gây ra vấn đề nghiêm trọng về hiệu suất, đặc biệt là cho đa nhiệm.
Mật ong Daisuki

@DaisukiHoney Bạn được chào đón! Vì vậy, nếu bạn thấy câu trả lời của tôi hữu ích, hãy nhớ bỏ phiếu. Và nếu đó là câu trả lời giải quyết vấn đề của bạn, hãy nhớ kiểm tra nó như vậy.
JakeGould

Vâng, chắc chắn tôi đang bỏ phiếu cho câu trả lời của bạn và kiểm tra nó. Một lần nữa, cảm ơn rất nhiều.
Mật ong Daisuki

Các phần Wikipedia mà bạn trích dẫn đang nói về giới hạn khả năng mở rộng cho mỗi hệ thống tệp, không phải cho mỗi thư mục: chỉ có một Tệp Danh mục cho mỗi hệ thống tệp và tất cả quyền truy cập phải tuần tự hóa trên đó. Nó khá là không liên quan đến câu hỏi.
poolie

@poolie Câu hỏi là về mỗi thư mục tồn tại trên một hệ thống tệp. Tệp danh mục tồn tại trên mỗi hệ thống tệp nhưng bản thân thư mục cũng tồn tại trên cùng một hệ thống tệp. Nó có liên quan đến một câu hỏi xử lý hơn 10.000 tệp trong một thư mục tồn tại trên một hệ thống tệp duy nhất. Nhưng câu hỏi này đã hơn 2 năm tuổi, vì vậy cảm ơn bạn đã liên kết Wiki. Tôi đã cập nhật câu trả lời của mình để bao gồm từ ngữ mới cũng như liên kết trực tiếp đến phần được đề cập.
JakeGould

4

Trả lời ngắn: Chà, nếu bạn đang đọc 100.000 tệp, tôi có thể hy vọng tập lệnh sẽ chậm.

Câu trả lời dài: Để trả lời câu hỏi này kỹ hơn, bạn phải xem hệ thống tệp trên máy Mac. Máy Mac sử dụng HFS + ( Hệ thống tệp phân cấp Plus ), đây là một hệ thống tệp hiện đại có những hạn chế, nhưng chỉ trong các tình huống cực đoan.

Theo kinh nghiệm của tôi, nó rất giống với hệ thống tệp nhật ký Linux EXT. Nó hỗ trợ các thư mục gắn kết, các quyền giống như UNIX, v.v. Nó xử lý các tệp ở định dạng 32 bit, làm cho số lượng tệp tối đa có thể được lưu trữ trong một khối lượng 4.294.967.295, theo nguồn này .

Hệ thống tệp bắt đầu bị hỏng với các tệp lớn hơn 8 EB trên các hệ thống hiện đại và lên tới 2,1 tỷ tệp và thư mục ở một vị trí như được nêu ở đây .

Theo cách mà HFS + Hayor thực sự có bất kỳ hệ thống tệp nào được thiết lập cho vấn đề đó, có rất nhiều tệp trong một thư mục không nên làm bất cứ điều gì 'kỳ lạ'.

Thành thật mà nói, tôi không nghĩ sẽ có một cải tiến hiệu suất phân phối các tệp trên một hệ thống phân cấp thư mục phức tạp hơn. Trên thực tế, kỹ thuật này có thể kém hiệu quả hơn vì tập lệnh của bạn sẽ phải thực hiện các cuộc gọi để thay đổi thư mục giữa quy trình.


Đúng. Tôi đã nghĩ về việc thay đổi hệ thống phân cấp thư mục nhưng nó gây ra thuật toán phức tạp hơn và tôi nghi ngờ rằng cải thiện hiệu suất nhiều. Cảm ơn câu trả lời. Tôi hiện có 200.000 tệp trong thư mục và có thể có 1.000.000 ở cuối. Tôi hy vọng nó hoạt động tốt mà không có hiệu suất xấu.
Mật ong Daisuki

@DaisukiHoney Nếu bạn đang làm việc với nhiều tệp đó, có thể đáng để xem liệu bạn có thể chia nhỏ mọi thứ vào các thư mục hay không. Có thể khó thực hiện ở giai đoạn này, nhưng có thể khiến mọi thứ ổn định hơn một chút về phía trước.
JakeGould

@JakeGould Cảm ơn lời khuyên. Tôi đã suy nghĩ về việc tái cấu trúc bởi vì tôi có thể thêm một số tệp nữa. Cảm ơn.
Mật ong Daisuki
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.