Làm cách nào để xóa tất cả các tệp khớp với một mẫu?


76

Khi tôi hoàn nguyên trong Mercurial, nó để lại một số .origtệp. Tôi muốn có thể chạy một lệnh để loại bỏ tất cả chúng.

Tôi đã tìm thấy một số nguồn để chạy:

rm **/*.orig

Nhưng điều đó mang lại cho tôi thông điệp:

rm: không thể xóa `* / .orig ': Không có tệp hoặc thư mục như vậy

Tôi cũng đã thử:

  • rm -rv *.orig

  • rm -R *\.orig


Câu trả lời:


149

Sử dụng findlệnh (cẩn thận!)

find . -name '*.orig' #-delete

Tôi đã nhận xét lệnh xóa nhưng một khi bạn hài lòng với những gì nó phù hợp, chỉ cần xóa #khỏi dòng và nó sẽ xóa tất cả các tệp đó.


Có làm việc đệ quy không?
Frank Barcenas

2
@FrankBarcenas Vâng - tìm mọi thứ đệ quy. Nếu bạn muốn giới hạn cách thức hoạt động, bạn có thể chơi với -maxdepthhoặc -mindepthđối số.
Oli

6
Chắc chắn để lại -deletecuối cờ. find . -delete -name '*.orig'sẽ bỏ qua bộ lọc và ghi đè toàn bộ thư mục của bạn.
Michael

1
@Michael, vâng. Tôi đã giải quyết vấn đề vớigit clean -fdx
kyb

1
@kamal Có lẽ tôi vẫn sử dụng find nhưng với vị ngữ -regexhoặc -iregexvị ngữ của nó . Đôi khi phân tích tên tệp (khi bạn đặt chúng xung quanh) đôi khi có thể khó thực hiện một cách an toàn.
Oli

6

"find" có một số kỹ thuật rất tiên tiến để tìm kiếm trong tất cả hoặc các thư mục hiện tại và các tệp rm.

find ./ -name ".orig" -exec rm -rf {} \;

3
Lợi ích của việc sử dụng là -deletegì?
muru

@muru Tôi cho rằng bạn sẽ nhận được lời nhắc cho mỗi tệp nếu bạn xóa -rf.
Peter

@Peter không nhất thiết. Ngay cả sau đó, vì vậy? Câu trả lời sử dụng -rf, và find-ok.
muru

@muru có vẻ như -delete không xóa các thư mục
Andrii Karaivanskyi

@AndriiKaraivanskyi trừ khi xóa thất bại, nó không.
muru

1

Tôi đã xóa tất cả các tệp bắt đầu bằng .nfs000000000 như thế này

rm .nfs000000000*
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.