Danh sách đối số của lâu quá lỗi Lỗi đối với `rm -rf *` trên một thư mục có 4000 tệp


2

Tôi nghĩ vấn đề này đã được sửa trong Linux như 10 năm trước. 4000 tập tin thực sự không có vẻ quá nhiều và có thể được gỡ bỏ không có vấn đề. Vì vậy, vấn đề này rõ ràng tồn tại trong OS X - có thể không có trong Ubuntu. Tôi đang phát triển trên OS X và triển khai lên Ubuntu

Có một cách giải quyết hệ thống trong cả hai môi trường? Tôi thực sự không muốn phải suy nghĩ về vấn đề này cho một số lượng nhỏ các tập tin như vậy? Vấn đề này có còn tồn tại trong Linux, cụ thể là Ubuntu không?


Bạn đang hỏi về cái gì Mac OS X hay Ubuntu?
Wuffers

1
uhh ... tôi nghĩ rằng tiêu đề khá rõ ràng
timpone

1
Và sau đó, bạn đã đi và nhầm lẫn nó với câu hỏi cuối cùng
soandos

Vui lòng xem lại câu hỏi của bạn. Không rõ bạn đang hỏi về hệ thống nào, cho dù bạn đang hỏi về nguyên nhân hay cách giải quyết.
Daniel Beck

@timpone: Không, không phải vậy. Bạn hỏi về Mac OS X trong tiêu đề nhưng bản thân câu hỏi của bạn chỉ đề cập đến Ubuntu.
Wuffers

Câu trả lời:


5

Đây vẫn là một vấn đề trên tất cả các Unix mà tôi biết, cũng như Windows. Đây thực sự là một giới hạn về số lượng byte được truyền trên dòng lệnh, không phải số lượng tệp hay bất cứ thứ gì.

Hãy thử getconf ARG_MAXxem giới hạn (tính bằng byte) cho Unix của bạn. Bạn có thể sử dụng xargslệnh để giải quyết các vấn đề như vậy.


xargs có xu hướng SLOW - ngạc nhiên hơn nữa đây vẫn là một vấn đề hơn bất cứ điều gì. như một thủ tục phổ biến ugh ...
timpone

Vấn đề đặc biệt này không xuất hiện trên Windows thường xuyên, vì trình bao không mở rộng ký tự đại diện, tùy thuộc vào từng ứng dụng để làm điều đó.
afrazier

Vâng, nhưng tôi cũng nói rằng một lý do lớn cho trường hợp này là Windows có truyền thống có các khả năng phụ, vì vậy không ai thích sử dụng nó nhiều. Điều đó nói rằng, tôi đã gặp phải vấn đề này trên Windows trong khi biên dịch một dự án với một danh sách lớn các tên đường dẫn dài được chuyển đến trình biên dịch thực thi.
jjlin

5

Đây không phải là một vấn đề mà là một giới hạn. Bạn có thể sử dụng một cái gì đó như thế này:

find ./ -exec rm -rf {} \;

Hoặc vấn đề của việc không sử dụng một sự thay thế nào là công việc?


hmm .... có lẽ chỉ là bí danh rm -rf đến đó?
timpone

3

Mặc dù tôi không thể nói cho các * nix khác, AFAIK, "vấn đề" này luôn tồn tại trong Mac OS X.

ARG_MAX được định nghĩa như sau trong /usr/include/sys/syslimits.h:

#define ARG_MAX   (256 * 1024)  /* max bytes for an exec function */

sysctl kern.argmax trả về:

kern.argmax: 262144

(Đây là trong Mac OS X 10.7.3; nhiều loại giới hạn này đã được tăng dần trong suốt vòng đời của OS X).


thx, hữu ích để biết
timpone

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.