Tìm kiếm tất cả các tệp có phần mở rộng .sql trong các thư mục và thư mục con


17

Tôi muốn tìm kiếm tất cả các tệp có phần mở rộng .sql trong các thư mục và thư mục con (đệ quy).

Tôi có thể làm cái này như thế nào?

Câu trả lời:


29

Hoặc là...

find $directory_name -name \*.sql

Ví dụ

find / -name \*.sql

Hoặc là

find ~ \*.sql

(trong đó ~ tương đương với / home / your_username /) hoặc ...

find /usr/local/share/ \*.sql

và kể từ đó trở đi.


2

Chạy cái này trong dòng lệnh:

cd / && find | grep '\.sql$'

Thay đổi '/' thành thư mục bạn muốn tìm kiếm.

Các findlệnh có khả năng hoàn thành nhiệm vụ mà không grep (sử dụng tùy chọn bổ sung), nhưng tôi thấy việc sử dụng trên thuận tiện hơn.

Theo thứ tự, lệnh trên:

  1. Thay đổi thư mục hiện tại thành thư mục gốc (cd / )
  2. Liệt kê tất cả các tệp và thư mục tại và bên dưới thư mục hiện tại ( find)
  3. Lọc các tệp và thư mục cho mọi thứ kết thúc bằng '.sql' ( | grep '\.sql$')

cảm ơn, bạn có thể giải thích nó? bạn sử dụng grep và chuyển đầu ra của nó để tìm?
Blankman

Ngược lại, thực sự. Tôi đang sử dụng find và chuyển đầu ra của nó cho grep. Tôi đã thêm một lời giải thích chi tiết hơn ở trên.
Barbarrosa

điều này cũng sẽ làm việc trên máy Mac? Tôi đã thử 'tìm | grep '\ .sql $' và nó xuất ra thông tin trợ giúp sử dụng.
Blankman

find là một công cụ mạnh mẽ và bạn thực sự không cần phải chuyển đầu ra sang grep. Đây là một liên kết đẹp - content.hccfl.edu/pollock/unix/findcmd.htm
Panther

1
findđã có khả năng lọc
enzotib

1

Tôi biết rằng đây là một bài viết cũ, nhưng tôi khá mới về điều này và tôi đã tìm thấy một cách dễ dàng để tìm tất cả các tệp của một phần mở rộng nhất định trong một thư mục và các thư mục con của nó. Vâng, trước tiên bạn điều hướng đến parent Directorylúc đó find . -name '*.sql'và điều đó sẽ tìm thấy cho bạn tất cả các tệp có phần mở rộng .sql trong các thư mục và thư mục con của nó.

Trong trường hợp của tôi, tôi muốn xóa tất cả các tệp .xml trong thư mục và các thư mục con của nó, vì vậy những gì tôi đã làm nhiều hơn là tôi đã thêm xóa như ở đâyfind . -name '*.xml' | xargs rm

Hy vọng điều này sẽ giúp ai đó :)


2
findhiểu -deletelệnh. Không cần liên quan rm. Hoặc bạn có thể sử dụng -execlệnh để gọi nó trực tiếp mà không cần đường vòng qua đường ống và xargs.
David Foerster

0
locate -br \\.sql$ | egrep '^/folder/path/'

Nếu nó chưa được cài đặt, thì trước đó hãy cài đặt nó với:

sudo apt install mlocate

Điều này đòi hỏi một phiên bản cập nhật mlocate.dbkhông được thiết lập ngoài hộp trong Ubuntu (tôi xin lỗi). Ngoài ra, tại sao không đơn giản locate '/folder/path/*.sql'?
David Foerster

@DavidFoersterI Tôi đã thử như bạn đã chỉ định nhưng nó không hoạt động, tôi đoán regex trong locatecó một số cài đặt khác với regex được sử dụng trongegrep
Vzzarr

locatephù hợp với biểu thức toàn cầu như /folder/path/*.sql, không phải biểu thức thông thường.
David Foerster

xin lỗi, nhưng từ man locatetôi nhận được -r, --regexp REGEXP - Search for a basic regexp REGEXPnên tôi cho rằng đó là một regex. Dù sao, tôi đã thử "biểu hiện toàn cầu" của bạn nhưng không được, tôi xin lỗi
Vzzarr

Vui lòng đọc ít nhất một vài câu đầu tiên của phần mô tả trước khi bạn bắt đầu chọn cherry từ từ đồng nghĩa tùy chọn: Từ Nếu --regexkhông được chỉ định, PATTERNs có thể chứa các ký tự toàn cầu. Từ ( nguồn )
David Foerster
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.