Tại sao điều này không hiển thị các tập tin / thư mục ẩn?


140

Tôi đã xem qua hệ thống của mình du -sch ./*để tìm các tập tin vô dụng lớn mà tôi có thể đã dự trữ mà không có lý do, khi tôi tìm thấy điều này:

$ du -sch ./*
du: cannot read directory ‘./drbunsen/.gvfs’: Permission denied
du: cannot read directory ‘./drbunsen/.cache/dconf’: Permission denied
18G ./drbunsen
18G total

$ cd drbunsen/
$ du -sch ./*
601M ./Desktop
20K ./Documents
598M ./Downloads
4.0K ./flash
4.0K ./Music
8.0M ./Pictures
4.0K ./Public
4.0K ./Templates
4.0K ./Ubuntu One
8.0K ./Videos
11G ./VirtualBox VMs
6.9M ./workspace
12G total

Làm cách nào để hiển thị các tệp ẩn? du -sch ./.*cho kết quả tương tự như du -sch ./*.


du -hs .[^.]* *cho tất cả các tệp ẩn, loại trừ ...những câu trả lời khác dường như bị thiếu.
laggingreflex

Câu trả lời:


245

Sử dụng

du -sch .[!.]* * |sort -h

trong thư mục nhà của bạn.

Ngoài ra, lệnh tôi sử dụng thường xuyên nhất là

ncdu

Dễ dàng cài đặt nếu cần:

sudo apt-get install ncdu

1
Cảm ơn, bạn là một thiên tài. Tôi không phải là bậc thầy trong bash, doe [!.] Làm gì?
Dr_Bunsen

10
@Dr_Bunsen: Đó là một quả cầu liệt kê tất cả các tệp bắt đầu bằng một tệp duy nhất .. Đây là một mẹo nhỏ: nếu bạn không biết những gì trông giống toàn cầu, hãy thử chạy echo .[!.]*hoặc bất cứ điều gì. Shell sau đó sẽ mở rộng toàn cầu và chuyển nó vào echo, in ra danh sách các tệp kết quả.
Tikhon Jelvis

14
Điều đó không thể liệt kê các tệp có tên như ..foovà có thể gây ra sự cố với các tệp có tên bắt đầu bằng -. Nó cũng có thể thất bại nếu danh sách arg quá dài. du -ahd1sẽ không có vấn đề nào
Stéphane Chazelas

Không liên quan đến câu hỏi ban đầu, nhưng có liên quan đến việc sử dụng hàng ngày: Có thể hữu ích khi bao gồm công tắc 'c' để hiển thị tổng số và sắp xếp lại các tùy chọn một chút để lệnh này dễ nhớ hơn một chút : du -cksh .[!.]* * |sort -h.
Daddy32

56

Tôi có cùng một câu hỏi trong danh sách gửi thư của coreutils, bởi vì thật khó để tôi nhớ được lệnh kỳ lạ này của @ don.joey. Và Bob Proulx đề xuất mệnh lệnh tốt hơn, tự nhiên hơn: du -ahd1 | sort -h

Nếu bạn muốn liệt kê tất cả các tệp trong thư mục hiện tại thì hãy sử dụng '.' hoặc không cung cấp cho nó bất kỳ đối số tập tin nào cả. Ngoài ra, bạn có thể muốn sử dụng tùy chọn -d, --max-height = N.

Thử đi:

du -hd1


7
Thêm -atùy chọn cho nó là tương đương.
Stéphane Chazelas

6
Đây phải là câu trả lời được chấp nhận vì nó đơn giản và dễ nhớ và dễ hiểu hơn.
Bastien

8

Khi bạn chạy cùng một lệnh trong thư mục, nó không bao gồm các tệp ẩn bắt đầu bằng .số đếm. Nếu bạn đã cài đặt Steam chẳng hạn, nó mặc định cài đặt các trò chơi bên dưới ~/.local/share/Steam/và chính nó cũng được cài đặt ở đó.

Trong bash bạn rõ ràng cần phải chạy du -sch .[!.]* *vì nó không mở rộng toàn .*cầu. Dưới zshhoặc các shell khác, du -sch * .*nên hoạt động, như .*được mở rộng để bao gồm danh sách tất cả các tệp ẩn trong thư mục hiện tại.


ĐỒNG Ý. Rõ ràng có vấn đề với bash, vì nó dường như không mở rộng đúng cách .*. Nhưng du -sch * .*không làm điều đúng theo zsh. Trong bash, du -sch .*dường như được tính .nhưng không mở rộng để hiển thị các tệp riêng lẻ.
dobey

Đối với tôi. * Cũng mở rộng thành ../* và do đó du đi ra khỏi thư mục mà tôi muốn xem kích thước của nó! Tôi đã phải sử dụng ./.[ ^. [* Thay thế.
Ari

Đó là zsh và tất cả các vỏ có nguồn gốc từ vỏ Forsyth (ngày nay hầu hết chỉ có pdksh và các dẫn xuất của nó) làm đúng và không mở rộng. và đây. Tất cả các shell giống như Bourne khác đều làm (bash, Bourne, AT & T ksh, dash, yash ...). Trong zsh, bạn sẽ sử dụng du -sch -- *(D)mặc dù, không du -sch -- * .*.
Stéphane Chazelas
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.