Xóa nhiều nhiều tập tin khỏi một thư mục


7

Tôi có một thư mục chứa 137795 tệp trong đó. Tôi cần phải xóa tất cả chúng. Khi tôi chạy rm *tôi nhận được -bash: /bin/rm: Argument list too long. Làm thế nào để tôi vượt qua lỗi này?

Câu trả lời:


15

Như tôi có thể thấy bạn không cần phải xóa thư mục của mình, chỉ có các tệp bên trong. Vì vậy, bạn có thể tạo lại nó

rm -r /path/to/dir && mkdir /path/to/dir

hoặc thậm chí chỉ xóa các tập tin bên trong

find /path/to/dir -type f -delete

afair đầu tiên làm việc nhanh hơn.

CẬP NHẬT. Lưu ý rằng cách đó findcó thể không tối ưu theo quan điểm tiêu thụ không gian, vì kích thước thư mục sẽ chỉ bị giảm sau đó fsck. Chi tiết .


Cảm ơn - Tôi biết sẽ có một giải pháp tao nhã.
David Oneill

3

Cách giải quyết # 1:

find /path/to/dir -delete

Cách giải quyết # 2:

rm a*;

rm b*;

rm c*;

etc

4
bạn không cần phải thêm -name "*"để tìm tất cả các tập tin. Nó tìm thấy như vậy theo mặc định.
vội vàng

việc sử dụng -name "*"có vẻ hơi dư thừa, bạn có thể giải thích lý do tại sao bạn chọn điều đó thay vì chỉ một find /path/to/dir -delete, ngoài việc sử dụng cùng một quả cầu như OP không?
jsbillings

Ngoài ra, tùy thuộc vào việc triển khai hoặc tuổi của bạn find, "*" có thể không bao gồm các tệp bắt đầu bằng dấu "." (các phiên bản hiện tại của findutils không bao gồm các tệp chấm đó).
jsbillings

-1

Sử dụng findcó lẽ là đặt cược tốt nhất. Một số vấn đề với các câu trả lời khác là không xóa mọi thứ trong thư mục hoặc xóa chính thư mục đó. Bạn có thể sử dụng lsvới xargs, nếu không có ký tự đặc biệt hoặc findvới các tùy chọn nhất định.

ls -1 | xargs rm -r

hoặc là

find . -depth -path ./.* -prune -o -not -name . -delete

Điều này sẽ bỏ qua mọi thứ trong thư mục hiện tại bắt đầu bằng .( -prune) và sẽ xóa bất kỳ tệp hoặc thư mục nào khác, miễn là nó không phải là thư mục trên cùng ( .). Đầu tiên -depthsẽ nhìn vào bên trong các thư mục, điều này sẽ tránh được lỗi 'thư mục không trống'. Nếu -notđối số không có sẵn trên hệ thống của bạn, thì hãy sử dụng !.


5
Đừng không phân tích cú pháp ls, hoặc mong đợi những điều để phá vỡ. Tệ. mywiki.wooledge.org/ParsingLs
Chris Down

1
Tôi đã đề cập ở trên: "nếu không có ký tự đặc biệt".
Arcege
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.