1. Tổng quan
Trong hướng dẫn này, chúng ta sẽ xem xét các cách xóa tệp có kích thước bằng 0 trong Linux.
2. Tìm tệp 0 byte
Trước tiên, hãy tìm kiếm tất cả các tệp 0 byte trong thư mục chính của chúng tôi bằng lệnh find:
$ find /home/clienthost -size 0
/home/clienthost/log
/home/clienthost/test/logging.log
/home/clienthost/job.txt
tìm kiếm trong tất cả các tệp, thư mục và thư mục con bắt đầu từ đường dẫn chúng tôi đã chỉ định. Tùy chọn -size giới hạn các tệp được tìm thấy ở những tệp sử dụng ít hơn, nhiều hơn hoặc chính xác n đơn vị không gian, làm tròn lên. Nếu chúng ta không chỉ định bất kỳ đơn vị nào thì đơn vị mặc định cho kích thước sẽ là số khối được sử dụng. Vì vậy, nếu chúng ta muốn các tệp có kích thước chính xác là 0 byte, chúng ta nên sử dụng hậu tố ‘c’ dành cho byte:
$ find /home/clienthost -size 0c
3. Sử dụng lệnh find
Nếu chúng ta có một danh sách dài các tệp 0 byte, chúng ta có thể tìm kiếm chúng bằng lệnh find và sử dụng lệnh -delete để xóa tất cả các tệp tìm thấy:
$ find /home/clienthost -size 0c -delete
Tốt hơn hết bạn nên kiểm tra kết quả tìm thấy trước khi sử dụng tùy chọn -delete:
$ find /home/clienthost -size 0c
Lưu ý rằng find sẽ đi đến tất cả các thư mục và thư mục con (trong trường hợp của chúng tôi là thư mục kiểm tra) và xóa tất cả các tệp bắt đầu từ /home/clienthost. Chúng ta có thể giới hạn chức năng này bằng cách đặt tùy chọn -maxdepth.
3.1. Sử dụng lệnh -maxdepth
Với -maxdepth tùy chọn cho lệnh find tìm kiếm các tệp có giới hạn về độ sâu bắt đầu từ /home/clienthost:
$ find /home/clienthost -maxdepth 1 -size 0c -delete
Hãy kiểm tra các tập tin chưa bị xóa:
$ find /home/clienthost -size 0c
/home/clienthost/test/logging.log
Bởi vì chúng ta thiết lập -maxdepth, find không vào thư mục kiểm tra lần này. Vì vậy, tệp log.log vẫn tồn tại.
3.2. Sử dụng lệnh -name
Nếu chúng ta chỉ muốn tìm kiếm trong thư mục hiện tại và lọc các tệp có tên cụ thể, chúng ta có thể sử dụng tùy chọn -name:
$ find /home/clienthost -maxdepth 1 -size 0c -name "log*" -delete
Lệnh này chỉ xóa các tệp có tên bắt đầu bằng ‘log’.
3.3. Sử dụng lệnh -exec
Trong các phiên bản tìm kiếm cũ hơn, tùy chọn -delete có thể không khả dụng. Trong trường hợp này, chúng ta có thể sử dụng tùy chọn -exec. Ở đây, -exec cho phép chúng ta thực thi lệnh rm và xóa các file được tìm thấy:
$ find /home/clienthost -maxdepth 1 -size 0c -exec rm '{}' \;
Chuỗi ‘{}’ sau -exec được thay thế bằng tên tệp tìm thấy. Lưu ý rằng chúng tôi đặt các dấu ngoặc nhọn trong dấu ngoặc đơn để bảo vệ chúng khỏi bị hiểu là dấu câu của tập lệnh shell.
Ngoài ra, hãy lưu ý rằng ở cuối lệnh và tất cả các đối số bắt buộc của nó, chúng ta nên sử dụng dấu ‘;’ để chỉ định phần cuối của lệnh. Chúng tôi cũng bảo vệ dấu chấm phẩy khỏi bị shell mở rộng bằng cách sử dụng ‘\’. Việc sử dụng dấu ngoặc đơn xung quanh dấu chấm phẩy (‘;’) cũng mang lại sự bảo vệ tương tự.
3.4. Thứ tự lệnh
Thứ tự của các lệnh để lọc các tập tin và xóa chúng rất quan trọng. Do đó, nếu chúng ta sử dụng tùy chọn -delete hoặc -exec trước khi giới hạn kích thước file, find sẽ bỏ qua tất cả các tùy chọn khác. Vì vậy, tất cả các tập tin trong thư mục sẽ bị xóa:
$ find /home/clienthost -delete -maxdepth 1 -size 0c
4. Kết luận
Trong bài viết này, chúng tôi đã thảo luận về các phương pháp xóa tệp có kích thước bằng 0.
Chúng ta có thể sử dụng lệnh find để lọc kích thước tệp bằng tùy chọn -size, sau đó xóa tất cả các tệp bằng tùy chọn -delete. Nếu tùy chọn -delete không khả dụng, chúng ta có thể sử dụng -exec và thực thi lệnh rm trên tất cả các tệp 0 byte.
Chúc bạn thành công!