du báo cáo kích thước thư mục lớn hơn nhiều so với tổng số nội dung của nó


7

Chạy du -shc *trong thư mục trên cung cấp 110Gcho một thư mục cụ thể, trong khi chạy cùng một lệnh bên trong thư mục đó cho tổng kích thước 11G. Làm thế nào là có thể?

Chi tiết nền tảng: HĐH: CentOS 6.6 x86_64 Loại ổ đĩa: trạng thái rắn Loại khối lượng: RAID 6 mảng Bộ điều khiển RAID: LSI MegaRAID SAS Hệ thống tập tin: ext3

Câu trả lời:


7

Hầu hết có lẽ bạn có các tập tin ẩn trong thư mục. Vấn đề là global *chỉ chọn các tệp và thư mục không bắt đầu bằng .. Vì vậy, nếu họ làm họ không được thông qua để duchỉ huy. Mặt khác, từ thư mục trên cùng, bạn có kích thước của toàn bộ thư mục, bao gồm các tệp chấm.

Để khớp tất cả các tệp trong thư mục đã cho, bao gồm cả các tệp ẩn, hãy thử (với bash)

du -shc -- {.[!.],..?,}*

hoặc đặt tùy chọn dotglobsao cho *khớp với các tệp ẩn:

shopt -s dotglob
du -shc -- *

Chàng trai, tôi xấu hổ. Tôi đã không nghĩ về điều đó. Tôi ước có một cú pháp shell đơn giản hơn để bao gồm các tệp ẩn trong bản mở rộng. Đặc biệt với các lệnh như du, nơi bạn thường muốn xem mọi thứ trong thư mục. Cảm ơn.
orodbhen

@orodbhen Quả cầu này hơi phức tạp một chút để xử lý mọi khả năng "bất thường" như các tệp bắt đầu từ hai dấu chấm ..abchoặc bắt đầu từ dấu gạch nối -abc. Hầu hết các lần bạn chỉ có thể làm du -shc * .??*hoặc ở dạng ngắn hơn du -shc {.??,}*. Bạn không thể thoát khỏi ?để không đưa thư mục cha ..vào tài khoản. Bạn cũng có thể đặt dotglobtùy chọn trong bash, để nó bao gồm các tệp ẩn theo mặc định (tôi sẽ thêm tùy chọn đó vào câu trả lời).
jimmij

@orodbhen Trong zsh: *(D)(hoặc bao gồm các tệp chấm mặc định với setopt glob_dots).
Gilles 'SO- ngừng trở nên xấu xa'

Đã sử dụng dòng lệnh Linux trong 12 năm, thậm chí chưa bao giờ nghe về lệnh shopt!
HDave
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.