Tìm tập tin theo tên


11

Làm cách nào tôi có thể mang tất cả các tệp có tên phù hợp với biểu thức chính quy cụ thể, đệ quy trong cây thư mục, đến một bộ đệm được chuyển hướng?

Vì vậy, tôi có thể đổi tên / xóa tất cả chúng cùng một lúc?


2
Bạn đã xem xét 'find-name-dired' chưa? (Sử dụng ký tự đại diện, không phải biểu thức chính quy.)
Marco Wahl

2
Bạn nên gửi câu trả lời như @MarcoWahl. Tôi không có ý tưởng dired có thể làm điều đó!
Tyler

1
Thư viện find-dired+.elcung cấp cho bạn một phiên bản nâng cao của lệnh find-name-dired. Nó chấp nhận các đối số tùy chọn chỉ định (1) độ sâu tìm kiếm tối thiểu và tối đa và (2) đường dẫn để loại trừ khỏi tìm kiếm.
vẽ

Câu trả lời:


11

Ký tự đại diện

Sử dụng

M-x find-name-dired

để có được các tập tin theo một ký tự đại diện.

Thí dụ

Tìm tất cả các tệp có hậu tố "org" trong thư mục "~ / org /". Nhập theo chỉ dẫn

M-x find-name-dired
~/org
*org

và tận hưởng.

Biểu hiện thông thường

Sử dụng

M-x find-dired

với các đối số phù hợp để có được các tệp theo một biểu thức thông thường.

Thí dụ

Tìm tất cả các tệp có hậu tố "org" trong thư mục "~ / org /". Nhập theo chỉ dẫn

M-x find-dired
~/org
-regex ".*org$"

và tận hưởng.


Là nó có thể tự động hóa quá trình này mà tự động kiểm tra *orgmà không cần tự nhập nó
Alper

Nếu tôi hiểu bạn chính xác, có nhiều khả năng. Ví dụ: tạo một lệnh đặc biệt cho một lệnh với (defun my-find-orgfiles () (tương tác) (find-name-dired "~ / myorgs /" "* org")) và đặt nó vào tệp init của bạn. Sau đó sử dụng Mx my-find-orgfiles RET. Hoặc thậm chí ràng buộc lệnh vào một phím.
Marco Wahl

Có thể my-find-orgfiles ()theo sau bởi "t" và "Q" // chọn tất cả và áp dụng không? @Marco Wahl
Alper

2

Biểu hiện thông thường

Để sử dụng regex, bạn cũng có thể thử find-lisp-find-dired. Lệnh này thuộc về lib tiêu chuẩn. find-lisp , được viết hoàn toàn bằng elisp, tức là bạn không cần phải cài đặt một findchương trình bên ngoài .

Chẳng hạn, phần sau đây hiển thị tất cả các tệp có phần mở rộng '.el' trong thư mục ~ / lisp:

M-x find-lisp-find-dired RET ~/lisp RET \.el\' RET

(Trận đấu vinh danh case-fold-search).

Ký tự đại diện

Điều đáng lưu ý là kể từ khi phát hành Emacs tiếp theo (v26.1) Dired hỗ trợ wilcards trong phần thư mục của đối số tên tệp. Điều đó có nghĩa là các công việc sau đây:

C-x d ~/soft/*/*.c RET

(Trận đấu là trường hợp nhạy cảm).

Lệnh này hiển thị trong bộ đệm có hướng Tất cả các tệp có phần mở rộng '.c', 2 mức độ sâu dưới '~ / soft' . Điều đó có nghĩa là, tất cả các tệp như '~ / soft / foo / bar.c' sẽ được liệt kê, nhưng không phải các tệp như '~ / soft / qux.c' hay '~ / soft / foo / baz / qux.c' .

Giống nhau nhưng không phân biệt chữ hoa chữ thường:

C-x d ~/soft/*/*.[cC] RET

Tặng kem

Nếu bạn đang chạy Dired với 'ls' được triển khai trong elisp, 'ls-lisp' hoặc 'eshell-ls', thì bạn có thể liệt kê đệ quy tất cả các tệp khớp với ký tự đại diện với cú pháp sau:

C-x d ~/soft/**/*.c RET

Lưu ý '**'. Trong trường hợp này, tất cả các tệp trong '~ / soft' khớp với ký tự đại diện được hiển thị, thậm chí '~ / soft / qux.c' .

Tuy nhiên, khi bạn đang sử dụng insert-directory-program việc mở rộng ký tự đại diện được tạo bởi trình bao hệ thống; điều đó có nghĩa là, cú pháp đệ quy '**' này chỉ hoạt động nếu được hỗ trợ bởi trình bao của bạn. Ví dụ, zsh không hỗ trợ nó, nhưng bash thì không. Với các shell khác mà zsh, lệnh trước sẽ thực hiện tương tự như:

C-x d ~/soft/*/*.c RET
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.