Cách xóa tất cả các tệp bắt đầu bằng một chuỗi nhất định trong Linux


36

Tôi cần tìm tất cả các tệp bắt đầu bằng tên NAMEtrong cây thư mục và xóa tất cả các tệp này bằng một lệnh shell.

Câu trả lời:


1

để xóa tất cả các tệp có tên --- bạn có thể sử dụng

find -name . 'name*' -exec rm {} \;

1
Bạn cũng có thể thêm -f làm đối số 'rm' để bạn không được nhắc "Bạn có chắc chắn muốn xóa tệp X không?"
UtahJarhead

Phiên bản nào grep-execcông tắc?
Ben Graham

Tại sao bình luận này có downvote?
Siêu âm54321

64

Xóa tất cả các tệp trong thư mục hiện tại và các thư mục con của nó trong đó tên tệp bắt đầu bằng "foo":

$ find . -type f -name foo\* -exec rm {} \;

Lưu ý: sử dụng một cách thận trọng - sao lưu trước - cũng thực hiện chạy khô trước, ví dụ:

$ find . -type f -name foo\*

sẽ chỉ cho bạn biết tên của các tệp sẽ bị xóa.


5
Tôi đã phải xóa hơn 2 triệu tệp và gặp sự cố, find . -type f -name foo\* -deleteđã thực hiện thủ thuật
Linas

25

Tôi đã thử cách này nó hoạt động cho tôi thử dưới đây lệnh.

rm -rf Example*

ở đây "Ví dụ" là văn bản phổ biến cho tất cả các tệp.


4
Không chắc tại sao đây không phải là câu trả lời được bình chọn cao nhất ....
DanTheMan

@DanTheMan Đó là vì nó mới hơn 4 năm so với các câu trả lời khác. Đây chắc chắn là câu trả lời đơn giản nhất mặc dù.
joshuakcockrell

10

Bạn có thể sử dụng find:

find . -name "name*" -exec rm {} \;

Ngoài ra, thay vì chỉ định '.' bạn có thể chỉ định một đường dẫn tuyệt đối.
UtahJarhead

3

Với globstartùy chọn (bật với shopt -s globstar):

rm -f **/NAME*

**/mở rộng để ./, */, */*/, */*/*/vv Nếu bạn có một thư mục tên bắt đầu với NAME, lệnh sẽ phàn nàn rằng rmkhông thể loại bỏ các thư mục, nhưng đó là tất cả.

Lưu ý rằng điều này có thể chạy vào các giới hạn độ dài dòng lệnh nếu toàn cục khớp với nhiều tệp.

Ngoài ra, với càng ít lời mời rmcàng tốt, nhưng không chịu bất kỳ giới hạn độ dài dòng lệnh nào:

find . -type f -name 'NAME*' -exec rm -f {} +

(Lưu ý +thay vì \;đóng -execcâu lệnh.)


2

find . -name 'foo'* -type f -delete có vẻ như câu trả lời đơn giản nhất

Bạn có thể chạy cái này mà không cần -deletecờ trước để xem tập tin nào sẽ bị xóa.


-2

Tìm kiếm số "Inode" của tệp / thư mục và sau đó xóa bằng số inode. Dưới đây là một ví dụ:

ls -il
3407873 drwxr-xr-x. 2 root   root      4096 Mar 30 07:49 p

find . -inum 3407873 -exec rm -rf {} \;

Đây là một câu trả lời tốt - cho một câu hỏi khác . Đây không phải là một câu trả lời cho câu hỏi này .
Scott
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.