Nếu bạn đang cố gắng xóa một số lượng rất lớn các tệp cùng một lúc (tôi đã xóa một thư mục có hơn 485.000 ngày hôm nay), có thể bạn sẽ gặp phải lỗi này:
/bin/rm: Argument list too long.
Vấn đề là khi bạn gõ một cái gì đó như rm -rf *
, *
nó được thay thế bằng một danh sách của tất cả các tệp phù hợp, như, rm -rf file1 file2 file3 file4 file4, v.v. Có một bộ nhớ tương đối nhỏ được phân bổ để lưu trữ danh sách các đối số này và nếu nó được lấp đầy, shell sẽ không thực thi chương trình.
Để giải quyết vấn đề này, rất nhiều người sẽ sử dụng lệnh find để tìm mọi tập tin và chuyển từng cái một cho lệnh của r r rách như thế này:
find . -type f -exec rm -v {} \;
Vấn đề của tôi là tôi cần xóa 500.000 tệp và nó đã diễn ra quá lâu.
Tôi tình cờ phát hiện ra một cách nhanh hơn để xóa các tập tin - lệnh của Google tìm kiếm có một lá cờ -delete nghén được xây dựng ngay trong! Đây là những gì tôi đã kết thúc bằng cách sử dụng:
find . -type f -delete
Sử dụng phương pháp này, tôi đã xóa các tệp với tốc độ khoảng 2000 tệp / giây - nhanh hơn nhiều!
Bạn cũng có thể hiển thị tên tệp khi bạn xóa chúng:
find . -type f -print -delete
Hoặc thậm chí hiển thị bao nhiêu tệp sẽ bị xóa, sau đó mất bao lâu để xóa chúng:
root@devel# ls -1 | wc -l && time find . -type f -delete
100000
real 0m3.660s
user 0m0.036s
sys 0m0.552s