Câu hỏi Làm thế nào tôi có thể đệ quy tìm tất cả các tập tin trong hiện tại và thư mục con dựa trên kết hợp ký tự đại diện?


Làm thế nào tôi có thể đệ quy tìm tất cả các tập tin trong hiện tại và thư mục con dựa trên kết hợp ký tự đại diện?


1210
2018-05-05 23:01


gốc


@kenorb - wow, thanx! nó hoạt động với ubuntu, nhưng không phải với QNAP QTS. - j.c


Các câu trả lời:


Sử dụng tìm thấy cho rằng:

find . -name "foo*"

find cần một điểm khởi đầu, và . (dấu chấm) trỏ đến thư mục hiện tại.


1798
2018-05-05 23:03



find cần một điểm bắt đầu, và dấu chấm (.) đang chọn thư mục hiện tại. Ví dụ. nếu bạn đang ở / home / myuser, find /home/myuser và find . có cùng kết quả. - Donal Lafferty
Tôi biết điều này được gắn thẻ là linux nhưng điều này đáng nói đến: đường dẫn là bắt buộc đối với các biến thể * nix khác không phải là linux. Trên Linux, đường dẫn là tùy chọn nếu bạn muốn sử dụng dấu chấm. - IslandCow
@Seatter "foo *" yêu cầu tìm kiếm tất cả các tệp bắt đầu bằng "foo". Nó chỉ là ví dụ của anh ta. Bạn có thể sử dụng "gpio *" để tìm tất cả các tệp có tên bắt đầu bằng gpio hoặc chỉ "gpio1" để tìm tất cả các tệp có tên gpio1. - schumacher574
lưu ý rằng "foo *" nằm trong dấu ngoặc kép để shell không mở rộng nó trước khi truyền nó đi tìm. nếu bạn vừa làm find . foo*, các foo* sẽ được mở rộng VÀ THÌ đã qua để tìm. - grinch
Worth nhấn mạnh rằng " " là rất cần thiết cho việc tìm kiếm đệ quy. - WesternGun


Việc tìm đường ống vào grep thường thuận tiện hơn; nó cung cấp cho bạn toàn bộ sức mạnh của các biểu thức chính quy cho phù hợp với ký tự đại diện tùy ý.

Ví dụ: để tìm tất cả các tệp có chuỗi không phân biệt chữ hoa chữ thường "foo" trong tên tệp:

~$ find . -print | grep -i foo

164
2017-08-15 06:56



find cũng có -iname, -regexvà -iregex cờ cho ký tự đại diện không phân biệt chữ hoa chữ thường, regex và trường hợp so khớp regex phân biệt chữ hoa chữ thường grep là không cần thiết. - iobender
Tôi không nghĩ đó là việc không cần thiết, nhưng thuận tiện hơn. - Elijah Lynn
Tuy nhiên, đường ống đến grep -v có thể cho phép bạn sử dụng các chuỗi đơn giản hoặc các regex để loại bỏ các mục bạn không muốn. - door_number_three
@iobender - Đáng buồn thay, tôi có thể nói với bạn từ kinh nghiệm rằng không phải tất cả các hệ thống đều có find lệnh hỗ trợ các tùy chọn đó. Đôi khi grep trở thành lựa chọn duy nhất. - Mr. Llama


find sẽ tìm tất cả các tệp khớp với mẫu:

find . -name "*foo"

Tuy nhiên, nếu bạn muốn có một hình ảnh:

tree -P "*foo"

Hi vọng điêu nay co ich!


105
2018-05-05 23:15



brew install tree cho người dùng Mac OSX w / o apt-get Cài đặt - DeBraid
Thử nghiệm trên macOS Sierra, chỉ cần thêm '--print' -> 'find. tên "* foo" --print '. superuser.com/questions/177289/searching-mac-through-terminal - john-salib


find -L . -name "foo*"

Trong một vài trường hợp, tôi đã cần tham số -L để xử lý các liên kết thư mục tượng trưng. Theo mặc định các liên kết tượng trưng được bỏ qua. Trong những trường hợp đó, nó khá khó hiểu vì tôi sẽ thay đổi thư mục thành một thư mục con và xem tệp phù hợp với mẫu nhưng tìm thấy sẽ không trả lại tên tệp. Sử dụng -L giải quyết vấn đề đó. Các tùy chọn liên kết tượng trưng cho tìm là -P -L -H


16
2018-01-14 02:47



L chuyển đổi là rất hữu ích. Nhiều lần người dùng không có bất kỳ ý tưởng nào về các thư mục cơ bản, cho dù chúng được liên kết mềm hay là các thư mục bình thường. Vì vậy, trong trường hợp nghi ngờ, nó luôn luôn tốt để sử dụng L tùy chọn. Ít nhất, nó luôn giúp tôi. - Ritesh


Nếu bạn vỏ hỗ trợ một lựa chọn globbing mới (kích hoạt nó bằng cách: shopt -s globstar), bạn có thể dùng:

echo **/*foo*

để tìm bất kỳ tệp hoặc thư mục đệ quy nào. Điều này được hỗ trợ bởi Bash 4, zsh và các shell tương tự.


Cá nhân tôi đã có hàm vỏ này được định nghĩa:

f() { find . -name "*$1*"; }

Lưu ý: Dòng trên có thể được dán trực tiếp vào trình bao hoặc được thêm vào người dùng của bạn ~/.bashrc tập tin.

Sau đó, tôi có thể tìm bất kỳ tệp nào bằng cách nhập:

f some_name

Mặc dù nó gần giống như sử dụng fd tiện ích.


16
2018-01-13 16:23



Điều này chỉ đi vào một cấp độ duy nhất. Không đệ quy vào các thư mục con cho tôi - Broncha
@Broncha Bởi vì bạn cần phải kích hoạt globbing mở rộng bởi shopt -s globstar chỉ huy. Điều này được hỗ trợ trong Bash, zsh và các shell tương tự. - kenorb
bash-3.2$ shopt -s globstar cho bash: shopt: globstar: invalid shell option name - drewish
@drewish Bạn cần nâng cấp Bash lên 4.x - kenorb
tiếng vang * / * foo nhanh hơn tìm - Josef Klimuk


find <directory_path>  -type f -name "<wildcard-match>"

Trong đối sánh ký tự đại diện, bạn có thể cung cấp chuỗi mà bạn muốn đối sánh, ví dụ: * .c (cho tất cả các tệp c)


15
2018-02-05 13:32



Câu trả lời của bạn là câu trả lời đúng nhất ở đây vì nó chỉ tìm kiếm các tệp như được chỉ định. Những người khác không chỉ định loại sẽ trả về thư mục. - wilsotc


Bạn có thể dùng:

# find . -type f  -name 'text_for_search'

Nếu bạn muốn sử dụng REGX -iname

# find . -type f  -iname 'text_for_search'

6
2017-10-29 16:09





Cách mặc định để tìm kiếm tệp đệ quy và có sẵn trong hầu hết các trường hợp là

find . -name "filepattern"

Nó bắt đầu di chuyển đệ quy cho tên tệp hoặc mẫu từ bên trong thư mục hiện tại nơi bạn được định vị. Với lệnh find, bạn có thể sử dụng các ký tự đại diện và các công tắc khác nhau để xem danh sách đầy đủ các tùy chọn, loại

man find

hoặc nếu trang người đàn ông không có sẵn tại hệ thống của bạn

find --help

Tuy nhiên, có nhiều công cụ hiện đại hơn và nhanh hơn tìm thấy, đang di chuyển toàn bộ hệ thống tập tin và lập chỉ mục các tệp của bạn, một công cụ phổ biến là định vị hoặc định vị / phân bổ, bạn nên kiểm tra hướng dẫn sử dụng hệ điều hành của bạn. cài đặt nó cần để bắt đầu cơ sở dữ liệu, nếu kịch bản cài đặt không làm điều đó cho bạn, nó có thể được thực hiện bằng tay bằng cách gõ

sudo updatedb

Và, để sử dụng nó để tìm kiếm một số loại tệp cụ thể

locate filename

Hoặc, để tìm tên tệp hoặc tệp tin từ trong thư mục hiện tại, bạn có thể nhập:

 pwd | xargs -n 1 -I {} locate "filepattern"

Nó sẽ xem xét thông qua cơ sở dữ liệu của nó các tập tin và nhanh chóng in ra tên đường dẫn phù hợp với mô hình mà bạn đã gõ. Để xem danh sách đầy đủ các tùy chọn định vị, hãy nhập: locate --help hoặc là man locate

Ngoài ra, bạn có thể định cấu hình định vị để cập nhật cơ sở dữ liệu của nó theo thời gian đã lên lịch thông qua cron job, do đó, cron mẫu cập nhật db tại 1AM sẽ trông giống như sau:

0 1 * * * updatedb

Các công việc cron này cần phải được cấu hình bởi root, vì updateb cần đặc quyền root để duyệt toàn bộ hệ thống tập tin.


4
2017-08-09 06:27



upvoted vì nó là người duy nhất đề cập đến xargs - drewish


cho tìm kiếm tập tin
find / -xdev -name settings.xml   -> toàn bộ máy tính
find ./ -xdev -name settings.xml  -> thư mục hiện tại & thư mục con của nó

cho các tệp có loại tiện ích mở rộng

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

2
2018-05-31 08:47





fd

Trong trường hợp, find quá chậm, hãy thử fd tiện ích - một lựa chọn đơn giản và nhanh chóng find được viết bằng Rust.

Cú pháp:

fd PATTERN

Bản giới thiệu:

Trang chủ: https://github.com/sharkdp/fd


1
2018-06-13 15:22





Nếu bạn muốn tìm kiếm tệp đặc biệt bằng ký tự đại diện, bạn có thể sử dụng mã sau:

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

Giả sử bạn muốn tìm kiếm mọi tệp .conf từ đây:

. nghĩa là tìm kiếm bắt đầu từ đây (địa điểm hiện tại)
-type nghĩa là loại mục tìm kiếm ở đây là tệp (f).
-name có nghĩa là bạn muốn tìm kiếm tệp bằng * .conf tên.


0
2018-02-05 02:52