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?
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:
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 đó find
có 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á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
-name "*"
để tìm tất cả các tập tin. Nó tìm thấy như vậy theo mặc định.
-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?
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 đó).
Sử dụng find
có 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 ls
với xargs
, nếu không có ký tự đặc biệt hoặc find
vớ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 -depth
sẽ 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 !
.
ls
, hoặc mong đợi những điều để phá vỡ. Tệ. mywiki.wooledge.org/ParsingLs