[Hỏi] Bash Script xóa hàng triệu file

Discussion in 'Hỏi Đáp Kỹ Thuật' started by money, Mar 20, 2019.

  1. money

    money Hương Chủ

    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?
     
  2. Hoa Mãn Lâu

    Hoa Mãn Lâu Trưởng Môn

    A xóa luôn cả folder thì lẹ và hiệu quả hơn là xóa từng file vầy, ko thể có xóa 1 lúc rồi ngưng dc
     
  3. sincos

    sincos Bang Chúng

    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.
     
  4. money

    money Hương Chủ

    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)
     
  5. sincos

    sincos Bang Chúng

    Của anh hàng triệu line như thế. Khác gì bắt notepad read file cả chục MB.
     
    money likes this.
  6. money

    money Hương Chủ

    @sincos ngoài lề xíu, dạo này làm ăn sao rồi? Lâu ko thấy em xuất hiện.
     
  7. sincos

    sincos Bang Chúng

    Skill xài hết rồi nên kiếm ăn ko dc anh ơi.
     
  8. money

    money Hương Chủ

    Để setup hôm nào bia nhé. Thấy em trên Zalo rồi.
     
  9. Hau Nguyen

    Hau Nguyen Sơ Nhập Giang Hồ



    Bác thử rm -f /path/to/*.jpg
     
  10. no-reply

    no-reply Bang Chúng

    Ở 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? {beat_brick}
     
    money likes this.
  11. sincos

    sincos Bang Chúng

    Dc nhưng phải code tí, mà dân auto vốn lười nên thế.
     
    money likes this.
  12. Phan Thị

    Phan Thị Bang Chúng

    cái 1 thì cat ra khoảng 10000 line 1 script rồi chạy thôi mà. 1 triệu thì mấy trăm file
     
    money likes this.
  13. money

    money Hương Chủ

    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 :D
     
  14. money

    money Hương Chủ

    Do phải filter 1 số thứ khác nữa bác ạ (lọc list file cần xoá bằng tool)
     
  15. console

    console Bang Chúng

    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
     
    money likes this.
  16. console

    console Bang Chúng

    money likes this.
  17. sincos

    sincos Bang Chúng

    Đấy em nói lại ko tin cơ...
     
  18. thitgaluoc

    thitgaluoc Hương Chủ

  19. Dung Vuong

    Dung Vuong Sơ Nhập Giang Hồ

    Xóa tay cho nhanh đi anh. Bao chuẩn mà k sợ lỗi {byebye}{byebye}{byebye}
     
  20. Nai

    Nai MiddleMan Staff Member

    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.
     
    Last edited: Mar 21, 2019