Mình có 1 danh sách nhiều triệu file ảnh cần xóa. Các file này nằm trong nhiều folder khác nhau. Mình đã list ra được danh sách file (kèm full path) và tạo 1 bash script để xóa từng file. Mỗi dòng là lệnh xóa 1 file theo cú pháp: Nhưng khi run bash scrip nó chỉ xóa được khoảng 1 vài chục ngàn file là báo đã thực hiện xong. Khi mình chuyển sang cách khác, lưu hết sanh sách file vào 1 file txt và dùng cú pháp như sau thì chạy OK. Về nguyên tắc thì cả 2 cách đều là xóa từng file và chạy hàng triệu lần nhưng tại sao cách 1 luôn bị ngừng nửa chừng nhỉ anh em?
Chắc liên quan đến bộ nhớ xếp ơi. Một thằng nó táng cả mớ vào họng nên chết nghẹn. Còn thằng xargs nó băm ra và bón mỗi line 1 miếng nên ko sao.
Xóa cả folder thì dễ rồi em, cái này do anh chỉ có nhu cầu xóa file thôi. Phải filter file riêng ra rồi xóa. Bash script cũng chạy từng line mà anh Bằng Kổ Tay? Nó phải thực hiện lần lượt từng line chứ? (Anh ko hiểu lắm cơ chế của Linux nên đoán vậy)
Ở trên anh @money nói đang cần filter xóa theo file mà anh. E thì không rành bash script lắm, nhưng thiết nghĩ nếu dùng php để unlink thì có được không mấy anh?
Dc nhưng mệt và chậm hơn xíu, mấy thao tác kiểu này nên dùng shell script nhanh hơn. Anh cũng ko rành đâu nhưng mò từ từ cũng ra. Do mình ko hiểu cơ chế, cứ nghĩ là dù có 1 triệu line mà chạy từng lệnh thì cũng chỉ tốn ít resource thôi. Server cũng tạm, core i7 64gb ram mà vẫn chịu không nổi
Câu lệnh đầu rm của anh nó sẽ bị limit do define của linux command, nó tính 1 lần thôi anh chứ k phải 1 triệu lần anh. Em nhớ k rõ là bao nhiêu. Còn câu lệnh thứ 2 nó sẽ chạy hết vì nó k bị limit vì rm được chạy nhiều lần, giống kiểu loop rm. Em có đọc ở stackoverflow 1 lần mà chỉ nhớ được vậy
https://stackoverflow.com/questions/4185017/maximum-number-of-bash-arguments-max-num-cp-arguments Anh co the doc them o day no giai thich ro hon. La limit bao nhieu line, size trong file do
Em đang dùng câu lệnh này để chạy cron job xóa cache, anh xem tham khảo được ko anh. Cái này em dùng để xóa cache trong 1000 thư mục cache theo gợi ý của anh hôm trước. Code: find /mnt/cache/* -mindepth 1 -type f -mtime +3 -exec rm {} \; Còn lí do trên thì không rõ, nhưng theo kinh nghiệm của em thì có khả năng là cách 1 sẽ phát sinh rất nhiều cú pháp không hợp lệ (vd như file không tồn tại) nên nó sẽ bị stop ở giai đoạn vài chục nghìn.