Nói rằng có các tệp có tên:
batman.c
debate.c
cricketbat.c
Lệnh nào và làm thế nào tôi nên sử dụng nó để liệt kê tất cả các tệp này bằng cách sử dụng thẻ tìm kiếm bat?
Nói rằng có các tệp có tên:
batman.c
debate.c
cricketbat.c
Lệnh nào và làm thế nào tôi nên sử dụng nó để liệt kê tất cả các tệp này bằng cách sử dụng thẻ tìm kiếm bat?
Câu trả lời:
batmọi nơiĐể tìm tất cả các tệp ở bất kỳ nơi nào /path/to/foldercó tên bat, bạn có thể sử dụng:
find /path/to/folder -name '*bat*'
Tôi đã trích dẫn mẫu tìm kiếm *bat*bởi vì, nếu các trích dẫn bị bỏ qua và các tệp khớp với *bat*thư mục hiện tại, shell sẽ mở rộng *bat*thành một danh sách của chúng và chuyển nó sang find. Sau đó findsẽ không làm việc đúng. ( \*bat\*và "*bat*"cũng làm việc.)
Để tìm kiếm trong thư mục bạn hiện đang ở (ví dụ: bạn đã chỉnh cdsửa), hãy sử dụng ., như thường lệ:
find . -name '*bat*'
Để tìm kiếm toàn bộ máy tính của bạn, sử dụng/ . Để tìm kiếm thư mục nhà của bạn, sử dụng ~, hoặc tên đầy đủ của thư mục nhà của bạn. ( Shell mở rộng~ đến đường dẫn đầy đủ của thư mục nhà của bạn.)
Nếu bạn muốn tìm kiếm không phân biệt chữ hoa chữ thường, vì vậy các tệp có chứa BAT, bAtv.v ... được khớp, hãy sử dụng -inamekiểm tra thay vì -namekiểm tra:
find /path/to/folder -iname '*bat*'
Tôi đã nhận thấy tất cả các tập tin của bạn kết thúc bằng .c. Nếu bạn chỉ muốn tìm các tệp như vậy, hãy sử dụng:
find /path/to/folder -name '*bat*.c'
Tôi nhận thấy tất cả tên tệp của bạn có batngay từ đầu hoặc cuối phần trước .chậu tố. Nếu bạn muốn tránh các tệp phù hợp như embattled.c, bạn có thể sử dụng:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-olà hoặc toán tử.
Để chỉ tìm các tệp thông thường - và không phải các thư mục, liên kết tượng trưng và các nút thiết bị đặc biệt - bạn có thể sử dụng -type f. Điều này thường được đề xuất và đôi khi khá phù hợp ... nhưng thường không phải là những gì bạn thực sự muốn , đặc biệt nếu bạn đang chạy findvới mục đích tự kiểm tra đầu ra. Nếu bạn có một liên kết tượng trưng phù hợp với tìm kiếm của bạn, bạn sẽ không muốn biết về nó chứ?
Nếu bạn muốn tìm cả tệp thông thường và liên kết tượng trưng, bạn có thể sử dụng:
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
Điều đó sử dụng -otoán tử và cả dấu ngoặc đơn để phân nhóm (phải được trích dẫn để shell không xử lý chúng một cách đặc biệt; nếu không, bạn sẽ gặp lỗi cú pháp).
Nhưng giả sử bạn chỉ muốn xem các liên kết tượng trưng mà cuối cùng trỏ đến một tệp thông thường (và không phải là liên kết tượng trưng đến thư mục, nút thiết bị, v.v.). Điều đó thực sự thậm chí còn đơn giản hơn: sử dụng -xtypethay vì -type. Miễn là bạn không chạy findvới -Lcờ, -xtypetrên một liên kết tượng trưng sẽ kiểm tra loại tệp mà liên kết trỏ đến.
find /path/to/folder -name '*bat*' -xtype f
Nếu bạn có một liên kết tượng trưng đến một liên kết tượng trưng khác đến một tệp, -xtype fsẽ khớp với nó ngay cả khi mục tiêu trực tiếp của nó là một liên kết tượng trưng khác chứ không phải là một tệp thông thường. Điều này gần như luôn luôn là những gì bạn muốn.
Mọi người thường nghĩ rằng họ muốn -type f, nhưng thực sự họ muốn -xtype f.
findHành động mặc định của bạn nếu bạn không chỉ định một là -print. Tất cả các lệnh được đưa ra ở trên là tương đương với chính chúng được xử lý -printở cuối.
findthường được sử dụng để chạy các lệnh dựa trên các tệp được tìm thấy - thường là các lệnh thực hiện thay đổi. Nhưng cũng có những hành động khác mà mục đích của nó là hiển thị kết quả, bên cạnh đó -print. Quan tâm đặc biệt là -ls:
find /path/to/folder -name '*bat*' -ls
Điều này cung cấp thông tin chi tiết trên mỗi tệp, ở định dạng nhiều cột, tương tự (mặc dù không hoàn toàn giống với) những gì bạn sẽ thấy bằng cách chạy .ls file
Để biết thêm thông tin về findvà các cách khác để tìm tệp, hãy xem:
findnhãn hiệu trang , truy cập trực tuyến hoặc bằng cách chạy man findtrong một thiết bị đầu cuối.find, locatevà xargscác tiện ích.-xtypelời khuyên; có lẽ ls *bat*và -maxdepth/ mindepthcũng đáng được đề cập.
ls đã được đề cập , tôi tập trung vào trường hợp đệ quy findở đây. Tất nhiên, một câu trả lời chi tiết bao gồm danh sách tên tệp không có giá trị (hoặc ít hơn) phù hợp với một số mẫu ( lsvà findvới -maxdepth) cũng sẽ hữu ích. Bạn có thể muốn gửi một câu trả lời như vậy!
Cách dễ nhất là chạy
locate bat
Bằng cách này, bạn có thể tìm kiếm trong toàn bộ máy tính để tìm các tệp có chứa "bat" trong tên tệp
Để làm mới danh sách các tệp trên PC của bạn chạy
updatedb
Chạy lệnh này khi gần đây bạn đã thêm các tệp mới vào tài khoản của mình
updatetdb
updatedbđược chạy thủ công hoặc tự động chạy), sudo updatedbtrước tiên, cần phải được chạy.
bat.
find /với locatecác tìm kiếm từ cơ sở dữ liệu, trong khi findliệt kê đệ quy /và sau đó khớp với biểu thức chính quy.
Mở terminal và thay đổi thư mục vào thư mục từ nơi bạn muốn bắt đầu tìm kiếm và sau đó chạy lệnh này:
find . -name "*bat*" -type f
Lệnh .bắt đầu từ thư mục hiện tại.
Các -namechuỗi phù hợp batvà là trường hợp nhạy cảm. ( -inamekhông phân biệt chữ hoa chữ thường)
Các -type ftìm kiếm chỉ cho các tệp.
Nếu các tập tin trong thư mục hiện tại sử dụng:
$ ls *bat*
batgirl.c batman.c batwoman.c cricketbat.c
Hoặc (để có chúng theo từng dòng):
$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c
Nếu bạn muốn tìm kiếm hệ thống cho các tệp đó, hãy sử dụng:
$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
Bạn muốn sử dụng findlệnh, với -inametùy chọn khớp với tên tệp không phân biệt chữ hoa chữ thường hoặc -nametùy chọn khớp với tên tệp phân biệt chữ hoa chữ thường . Cả hai sẽ cho phép bạn sử dụng tên ký tự đại diện. Vì vậy, để tìm bất kỳ tên tệp nào chứa "bat" bạn sẽ sử dụng:
find / -iname '*bat*'
Hoặc là
find / -name '*bat*'
Nghĩa *là "bất kỳ ký tự nào", vì vậy tìm kiếm đang tìm kiếm batvới bất kỳ ký tự nào, kể cả không có, trước hoặc sau nó. Các /tìm kiếm từ thư mục gốc theo cách đệ quy, bạn có thể sử dụng .sẽ tìm kiếm đệ quy từ thư mục hiện tại hoặc đường dẫn tuyệt đối cho nơi bạn muốn tìm kiếm. Hãy xem cách tìm kiếm tệp bằng regex trong tập lệnh shell linux
-type f, điều này không chỉ đơn giản là loại trừ các thư mục và thường không phải là những gì người dùng thực sự muốn .
Sử dụng tốt cũ find.
find <path_for_search> -type f -iname "*bat*"
ví dụ.:
% find . -type f -iname "*bat*"
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c
từ man find:
-type c
File is of type c:
[..]
d directory
[..]
f regular file
[..]
-iname pattern
Like -name, but the match is case insensitive.