du bỏ qua các liên kết tượng trưng


8

Hành vi mặc định dutrên hệ thống của tôi không phải là hành vi mặc định phù hợp.

Nếu lstôi /datathư mục của tôi , tôi thấy (loại bỏ những thứ không quan trọng):

ghs
ghsb -> ghs
hope
rssf -> roper
roper

Bên trong mỗi thư mục là một tập hợp các thư mục có số là tên. Tôi muốn lấy tổng kích thước của tất cả các thư mục được đặt tên 14, vì vậy tôi sử dụng:

du -s /data/*/14

Và tôi thấy...

161176 /data/ghs/14
161176 /data/ghsb/14
8 /data/hope/14
681564 /data/rssf/14
681564 /data/roper/14

Những gì tôi muốn chỉ là:

161176 /data/ghs/14
8 /data/hope/14
681564 /data/roper/14

Tôi không muốn thấy các liên kết tượng trưng. Tôi đã thử -L, -D, -S, vv Tôi luôn luôn nhận được các liên kết tượng trưng. Có cách nào để loại bỏ chúng?

Câu trả lời:


14

Điều này không dugiải quyết các liên kết tượng trưng; đó là vỏ của bạn.

*là một vỏ toàn cầu; nó được mở rộng bởi shell trước khi chạy bất kỳ lệnh nào. Do đó, trong thực tế, lệnh bạn đang chạy là:

du -s /data/ghs/14 /data/ghsb/14 /data/hope/14 /data/rssf/14 /data/roper/14

Nếu vỏ của bạn bị bash, bạn không có cách nào để bảo nó không mở rộng các liên kết tượng trưng. Tuy nhiên, bạn có thể sử dụng find(phiên bản GNU) thay thế:

find /data -mindepth 2 -maxdepth 2 -type d -name 14 -exec du -s {} +

2
Hoạt động hoàn hảo. Ai đó có thể giải thích việc sử dụng {}+ở đây?
Victor Wong


2

Bỏ duqua các liên kết tượng trưng:

dukhông đủ thông minh để không đuổi theo liên kết. Theo mặc định findsẽ bỏ qua các liên kết tượng trưng. Vì vậy, việc tạo ra một liên minh xấu xa giữa find, duawk, các hợp tối kỳ diệu bùa trở thành:

find /home/somedirectory/ -exec du -s {} + | awk '{total = total + $1}END{print total}'

Sản xuất:

145070492

Để buộc đầu ra phải có thể đọc được:

find /home/somedirectory/ -exec du -s {} + | awk '{total = total + $1}END{print (total / 1024 / 1024) "MB"}'

Sản xuất:

138,35 MB

Những gì đang xảy ra ở đây:

/home/somedirectory/      directory to search.
-exec du -s +             run du -s over the results, producing bytes
awk '...'                 get the first token of every line and add them up,
                          dividing by 1024 twice to produce MB

1
nên làcat /tmp/tmp.txt
Gu Wang
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.