Thu nhỏ / đặt lại kích thước thư mục?


11

Có cách nào để thu nhỏ một mục thư mục?

Các thư mục maildir dovecot của tôi đã tăng kích thước từ 4096 mặc định lên vài megs và nó đang gây rối với hạn ngạch đĩa.

Cách duy nhất mà tôi đã tìm thấy, là xóa và tạo lại thư mục. Tôi hy vọng có một chức năng kỳ diệu ở đâu đó - tôi mở cho mọi thứ, ngoại trừ trình biên dịch mã hóa bằng tay.

Chỉnh sửa: Đối với hậu thế, để tìm các mục> 4096:

 find / -type d -size +4k -printf "%s\t%p\t%i\n" | sort -nr

Câu trả lời:


6

Xem thêm rm trên một thư mục có hàng triệu tệp ; tiếp tuyến liên quan, nhưng chúng tôi thảo luận về nó ở đó.

Theo như tôi biết, ít nhất là trên ext2 / 3, không, không có cách nào (trực tuyến) để thu nhỏ chúng khi xóa + tạo lại. Chưa từng có, một số nguồn đề xuất e2fsck -Dcó thể hoạt động, mặc dù tôi có thể khẳng định không có kinh nghiệm cá nhân với tùy chọn đó.

Một số tài liệu tham khảo để đọc thêm:


1
Liên kết đầu tiên đặc biệt hữu ích: nó đặc biệt giải quyết vấn đề của tôi (máy chủ thư) và thực tế là Ted Tso đã cân nhắc về cuộc đối thoại khá tuyệt vời;)
mikewaters

3

Gần đây tôi đã phải xóa và tạo lại một thư mục NFS để thu nhỏ kích thước của nó sau khi nó đã phình to trước đó. Trong quá trình này, tôi đã tìm thấy một cách khá hiệu quả để làm điều này bằng cách sử dụng rsync và các liên kết cứng. Phương pháp này tránh sao chép các tệp thực tế, trong khi vẫn hoàn thành mục tiêu tạo lại thư mục có cùng nội dung.

Vì chúng tôi cần phải có thời gian chết để thực hiện thao tác này trong cửa sổ bảo trì của chúng tôi, làm cho thư mục được xây dựng lại có sẵn càng sớm càng tốt là điều quan trọng đối với chúng tôi. Nếu sự đơn giản quan trọng hơn đối với bạn, hãy thay đổi lệnh di chuyển đầu tiên thành 'rm -rf' trên thư mục nguồn và bỏ qua lệnh 'rm -rf' khác.

Tôi đã trích xuất các lệnh này từ một quy trình lớn hơn và trừu tượng hóa các tên thư mục, vì vậy xin lỗi nếu tôi đã mắc lỗi trong bản dịch đó.

mkdir /tmp/holding_dir/
rsync -ai --delete --link-dest=/path/to/source_dir/ /path/to/source_dir/ /tmp/holding_dir/
mv /path/to/source_dir/ /tmp/deleteme/
mv /tmp/holding_dir/ /path/to/source_dir/

Sau đó, chúng tôi loại bỏ thư mục. Tùy thuộc vào kích thước, bạn có thể cần phải sử dụng một kỹ thuật phức tạp hơn để làm điều này. Ví dụ: sử dụng rsync với cờ --delete để đồng bộ thư mục trống vào thư mục này có thể hiệu quả hơn.

rm -rf /tmp/deleteme/

2

Tôi sẽ làm nó như thế này.

cp -aloldir newdir && mvolddir tempname && mvnewdir olddir && rm -rtempname

Trong đó olddir là thư mục bạn muốn thu nhỏ newdirtempname là tên tệp tạm thời

cp -altạo các liên kết đến nội dung của olddir trong newdir và ba lệnh tiếp theo hoán đổi chúng với newdir và dọn sạch.


bóng mượt. không bao giờ biết về cp -l
Kevin Buchs
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.