Làm thế nào để thực thi lệnh trên danh sách tên tệp trong một tệp?


Câu trả lời:


11

Nếu bạn có một tệp trên mỗi dòng, một cách để làm điều đó là:

tr '\n' '\0' < list_of_files_to_be_deleted.txt | xargs -0 -r rm --

Danh sách tệp được đưa ra làm đầu vào cho trlệnh thay đổi dấu tách tệp từ nguồn cấp dữ liệu sang byte null và xargslệnh đọc các tệp được phân tách bằng byte rỗng trên đầu vào và khởi chạy lệnh rm với các tệp được thêm vào dưới dạng đối số.


1
Tôi cũng đề nghị sử dụng rm --thay vì chỉ rm, để tên tệp có thể bắt đầu bằng dấu gạch ngang sẽ không được coi là rmtham số.
artyom

Nó không hoạt động bạn thân ........ tr: toán hạng phụ monu.txt' Try tr - trợ giúp 'để biết thêm thông tin. rm: thiếu toán hạng Hãy thử `rm --help 'để biết thêm thông tin. ........ Đây là tất cả wat tôi có thể nhìn thấy
monu

1
Bạn có thể bỏ lỡ <trước tên tệp?
Jonas Berlin

Tôi cũng đã cải thiện lệnh xargs một chút - được thêm vào - theo đề xuất của @artyom và thêm -r để đảm bảo nó không chạy rm nếu không có tệp nào để xóa.
Jonas Berlin

5

Câu trả lời ở trên là tốt ở chỗ nó có độ dài lớn để xử lý tên tệp có khoảng trắng và "ký tự lạ". Nhưng cách đơn giản nhất, nếu tên tệp là lành mạnh, chỉ là (cảnh báo, bashism!):

rm $(< /the/file/with/names)

Đối với vỏ thường:

rm `cat /the/file/with/names`
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.