Sử dụng --exclude với lệnh du


67

Đây có lẽ là một cái gì đó cơ bản nhưng tôi không thể làm cho nó hoạt động. Tôi đang cố gắng sử dụng DU để có được tổng kích thước tệp trừ đi một số thư mục nhất định. Tôi cần loại trừ một thư mục cụ thể được gọi uploadsnhưng không phải mọi thư mục được gọi uploads. Ví dụ, cấu trúc tệp của tôi trông hơi giống thế này:

/store
  /uploads
    /junk_to_ignore
    /more_junk_to_ignore
  /user_one
    /uploads
  /user_two

Tôi có thể chạy lệnh sau:

du -ch --exclude=uploads* 

và nó cho tôi kích thước tệp trừ đi tất cả các thư mục "tải lên". Tuy nhiên, trong khi cố gắng loại trừ các thư mục nhất định (và tất cả các thư mục con của nó) tôi đều thất bại. Tôi đã thử các biến thể của:

du -ch --exclude=./uploads*
du -ch --exclude='/full/path/to/uploads/*'

nhưng dường như không thể tìm ra nó. Làm thế nào để tôi loại trừ một thư mục cụ thể?


username: store$ du -ch --exclude=./uploadsđã làm việc (có và không có ký tự đại diện) cho tôi, từ trong thư mục cửa hàng. Bạn đang chạy lệnh đó chính xác và từ trong thư mục cửa hàng? Và nó phải là đường dẫn tương đối (tìm thấy / in), không tuyệt đối.
Kevin

Câu trả lời:


88

Bạn gần như đã tìm thấy nó :)

du -ch --exclude=./relative/path/to/uploads

Lưu ý không có dấu hoa thị ở cuối. Dấu hoa thị có nghĩa là tất cả các thư mục con trong "tải lên" sẽ bị bỏ qua - nhưng không phải là các tệp trực tiếp trong thư mục đó.


4
Lạ ... cú pháp với dấu chấm ( du -sb --exclude=./relative/path/to/uploads) không hoạt động đối với tôi. Điều này không:du -sb --exclude relative/path/to/uploads
Nux

4
@Nux có lẽ là hương vị của bạn du. Của tôi (OSX) thậm chí không có --exclude, thay vào đó nó -I maskphải "Bỏ qua các tệp và thư mục phù hợp với mặt nạ được chỉ định." Trong ví dụ làm việc của bạn, bạn cũng bỏ qua điều đó =, khiến tôi nghĩ thêm rằng đó chỉ là phiên bản của bạn duhơi ducuồng nhiệt.
phatskat

Có phiên bản [OSX] [1] có vẻ như phiên bản [Linux du] [2] khá đơn giản. [1]: developer.apple.com/library/mac/documentation/Darwin/Reference/... [2]: linux.die.net/man/1/du
Nux

Điều gì xảy ra nếu tôi muốn loại trừ nhiều thư mục ví dụ ở đây, ngoại trừ các thư mục rác_to_ignore và tải lên các thư mục?
Kiran K Telukunta

Tại sao nó hoạt động với một đường dẫn tương đối, nhưng không phải là một đường dẫn tuyệt đối? Rất kỳ quặc!
Nick

9

Để loại trừ nhiều thư mục, chỉ cần vượt qua cờ --exclude một lần nữa.

du -ch --exclude=relative/path/to/uploads --exclude other/path/to/exclude

1
bạn cũng sử dụngdu -ch --exclude={relative/path/to/uploads,other/path/to/exclude}
Hajo Thelen

4

tuyệt vời để bỏ qua các hệ thống tập tin ảo như vậy

du -hsx --exclude=/{proc,sys,dev} /*

1

Nếu bạn phải dùng macOS, bạn cài đặt GNU Coreutils bằng lệnh sau.

brew install coreutils

Hầu hết các lệnh được cài đặt bởi Coreutils đều có tiền tố bởi gvì chúng có tên BSD được cài đặt sẵn trên macOS. Sau đó, bạn có thể làm như sau.

gdu --exclude=Microsoft /Library/Fonts/
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.