Câu trả lời:
Nếu tên tệp được đánh số liên tục, chỉ cần chạy lệnh sau:
rm fileName_{100..100000}
execgọi đến số lượng đối số mà một quy trình có thể có. Bạn có thể lấy nó với getconf ARG_MAX. Ví dụ trên hệ thống của tôi, nó là 2097152(~ 2,1 triệu). Điều này có nghĩa là rm(không phải là tích hợp) sẽ thất bại với nhiều tệp hơn. Các lệnh tích hợp không có vấn đề này và các giải pháp khác cũng không được đề xuất.
Bạn cũng có thể thử lệnh này,
for i in $(seq 100 100000); do rm fileName_$i; done
Nó sẽ xóa tất cả các tệp (trong phạm vi từ 100 đến 100000) nếu tên tệp chứa các số theo thứ tự liên tiếp.
Nói chung, bạn có một số cách để đạt được điều này:
rm fileName_{100..100000}
sẽ được mở rộng bằng vỏ thành khoảng 100.000 tên tệp. Nếu tên cơ sở là một đường dẫn dài và số lượng đủ cao, bạn thực sự có thể vượt quá độ dài tối đa của một dòng lệnh với phương pháp này.
các forvòng lặp
for i in $(seq 100 100000); do rm fileName_$i; done
không gặp phải vấn đề này, nhưng là một cách tương đối chậm để xóa các tệp, vì trình bao phải thực hiện thay thế biến và khởi chạy rm khoảng 100.000 lần.
Cả hai phương pháp trên có thể gây ra cảnh báo nếu một số tệp filename_101bị thiếu.
Thông thường, các giải pháp dựa trên findlà tốt hơn, vì chúng chỉ hoạt động trên các tệp thực sự ở đó (trong quá trình khám phá). Tuy nhiên, có một số khác biệt tinh tế:
find . -name 'fileName_[100-100000]' -exec rm {} \;
vẫn sẽ khởi chạy rmchương trình khoảng 100.000 lần, trong khi thay thế trận chung kết \;bằng cách +cố gắng giảm thiểu số lượng quy trình con. Cả hai phương thức có thể sẽ chậm hơn (nhiều hoặc một chút) so với sử dụng -deletemà không sử dụng các lệnh bên ngoài mà chỉ gọi các cuộc gọi hệ thống thay thế.
Tuy nhiên, luôn luôn kiểm tra trước nếu mẫu thực sự khớp với các tệp bạn muốn nhắm mục tiêu:
stefan@tuxedo ~ % mkdir askubuntu
stefan@tuxedo ~ % touch askubuntu/filename_{1..1000}
stefan@tuxedo ~ % find askubuntu -name 'filename_[100-1000]'
askubuntu/filename_1
Vì vậy, trong trường hợp này, bạn sẽ xóa một tệp bạn muốn giữ và để lại các tệp cần xóa.
Sử dụng lệnh sau:
find . -name 'fileName_[100-100000]' -exec rm {} \;
Điều đó sẽ xóa các tập tin từ 100 đến 100000.
Thêm thông tin: Trang web
{x..y}ra toàn bộ danh sách. Ví dụ, nếu bạn sử dụngecho test{1..3}nó sẽ được mở rộngecho test1 test2 test3và sau đó thực thi. Như bạn có thể thấy, nó intest1 test2 test3. Tương tự, nếu{x..y}không được kết nối với bất kỳ đối số, nó sẽ chỉ đặt các số ở đó. Vdecho test {1..3}sẽ chỉ intest 1 2 3.