Lệnh Linux: tìm tệp và chạy lệnh trên chúng


16

Làm cách nào để quản lý để tìm tất cả các tệp trong thư mục và thư mục con và chạy lệnh trên chúng?

Ví dụ,

find . -type f -name "*.txt" 

tìm thấy tất cả các tệp txt và:

find . -type f -name "*.txt" | gedit

gửi nó đến gedit, nhưng bên trong một tệp văn bản. Tôi muốn gedit để mở tất cả các tập tin văn bản.

Câu trả lời:


22

Bạn có thể sử dụng -execcờ để thực thi lệnh trên mỗi tệp phù hợp:

$ find ./ -type f -name "*.txt" -exec gedit "{}" \;

Cú pháp

Cú pháp hơi lạ (xem -exec command ;trong trang hướng dẫn để biết thêm):

The string `{}' is replaced by the current file name being processed

Bạn cũng có thể muốn xem xét -execdir, điều này sẽ làm tương tự, nhưng thực thi lệnh từ thư mục con chứa tệp phù hợp (điều này thường thích hợp hơn).


1
Cảm ơn. Tôi thấy rằng nó hoạt động. Nhưng kết thúc ("{}" \ :) có nghĩa là gì? thực hiện danh sách?

1
Chữ {}viết tắt của tên tệp hiện tại và dấu chấm phẩy chỉ là chấm dứt lệnh. Dấu gạch chéo ngược và dấu ngoặc kép xung quanh chỉ để ngăn chặn sự mở rộng vỏ.
David Cain

5

find . -type f -name "*.txt" -print0 | xargs -0 gedit


Cảm ơn. Tôi thấy rằng nó hoạt động. Nhưng cái gì -print0 | xargs -0 có nghĩa là gì?

1
@xyz, bạn có thể đọc về các cờ của bất kỳ lệnh UNIX nào bằng cách sử dụng các trang man. Hãy thử man findhoặc man xargs, sau đó /để tìm kiếm một lá cờ nhất định. Các tài liệu khá tốt, nó sẽ trả lời câu hỏi của bạn.
David Cain

1
-print0in một ký tự NULL sau mỗi mục, -0hy vọng các mục được phân tách bằng ký tự NULL. Đó là cách an toàn nhất để xử lý các tên khó khăn.
Notinlist

Và không có gì lạ một chút khi cú pháp không phải là gedit xargs -0 thay vì xargs -0 gedit. Tôi thấy rằng trước đây không hoạt động, nhưng không biết tại sao.

3
xargs thích hợp hơn là -exec vì lý do hiệu năng vì xargs có thể "bó" một số đối số trước khi chuyển chúng sang gedit. Nếu cần một lần chạy gedit đối với từng tệp riêng lẻ, hãy thay thế '... -print0 | xargs -0 gedit 'với' ... -print0 | xargs -0 -i gedit {} 'xargs là một trong những lệnh như tìm và sàng lọc mà bạn không bao giờ biết bạn đã hòa hợp như thế nào mà không cần một năm sau khi bạn tìm hiểu về nó.
arclight
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.