Làm thế nào để xóa các tập tin trên dòng lệnh với các biểu thức thông thường?


18

Hãy nói rằng tôi có 20 tệp có tên FOOXX, trong đó XX là số tệp, ví dụ: 01, 02, v.v.

Hiện tại, nếu tôi muốn xóa tất cả các tệp thấp hơn số 10, điều này thật dễ dàng và tôi chỉ cần sử dụng ký tự đại diện, ví dụ: rm FOO0 *

Tuy nhiên, nếu tôi muốn xóa các tệp cụ thể trong phạm vi, ví dụ 13-15, điều này trở nên khó khăn hơn.

rm FPP [13-15] không hoạt động và hỏi tôi có muốn xóa tất cả các tệp không. Likewse rm FOO1 [3-5] muốn xóa tất cả các tệp bắt đầu bằng FOO1

Vì vậy, cách tốt nhất để xóa phạm vi các tập tin như thế này là gì?

Tôi đã thử với cả bash và zsh, và tôi không nghĩ chúng khác nhau nhiều cho một nhiệm vụ cơ bản như vậy?


"... rm FOO1 [3-5] muốn xóa tất cả các tệp bắt đầu bằng FOO1" Điều này không có ý nghĩa gì, và chắc chắn không phải là trường hợp ở đây.
Ignacio Vazquez-Abrams

@Ignacio yeah- Tôi muốn xem bộ ký tự có thứ tự đối chiếu đó!
kmarsh

Câu trả lời:


31

Trong bash bạn có thể sử dụng:

rm FOO1 {3..5}

hoặc là

rm FOO1 {3,4,5}

để xóa FOO13, FOO14 và FOO15.

Cú đúp mở rộng Bash được ghi lại ở đây .


2
Hoặc thậm chí rm FOO{13..15}.
Ignacio Vazquez-Abrams

Điều này cũng đúng với ZSH?
Jack

@Jack: Vâng, đúng vậy.
Dennis Williamson

@Jack: bashlệnh tạo thành tập hợp con của zlệnh shell.
abhinavkulkarni

Vì vậy, tôi cần phải học cả cú pháp regex và globalbing. Boo Hoo. :)
MP Aditya

13

Đối với độc giả trong tương lai, findlệnh cũng có thể xóa các tập tin. Tôi giải quyết vấn đề này cho một vấn đề tương tự:

find . -type f -regex '...' -delete

nhưng câu trả lời được chọn là câu trả lời đơn giản nhất cho câu hỏi này.


Câu trả lời được chọn chỉ tốt cho các tệp tuân theo quy ước đặt tên. Nhờ câu trả lời của bạn, tôi có thể xóa tất cả các tệp đối tượng trong một thư mục. (trong trường hợp của tôi, tôi vừa đi cùng find . -name "*.o" -deletevà nó hoạt động như một bùa mê)
John Hamilton

6

ls | grep regex | xargs rm


6
Bạn nên sử dụng find -regex ... -print0 | xargs -0 ...cho điều này, nếu không nó sẽ thất bại cho tên tệp có khoảng trắng.
Dennis Williamson

1
Tất nhiên, nếu bạn sẽ sử dụng findthì bạn cũng có thể sử dụng -exec.
Ignacio Vazquez-Abrams

Trong trường hợp của tôi, các tệp có khoảng trắng và việc thay đổi dấu phân cách sẽ khắc phục vấn đề khoảng trắng: ls | grep regex | xargs --d006iter = '\ n' rm
Anake


@evilsoup, +1 để thêm cảnh báo đó, nhưng, ai sẽ chèn một dòng mới vào tên tệp?
Iulian Onofrei
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.