Làm cách nào để tải tệp ẩn vào tệp?


96

Tôi đang tìm kiếm thông qua kho lưu trữ Git và muốn bao gồm .gitthư mục.

grep không bao gồm thư mục này nếu tôi chạy

grep -r search *

Lệnh grep sẽ bao gồm thư mục này là gì?

Câu trả lời:


135

Vui lòng tham khảo giải pháp ở cuối bài đăng này như một giải pháp thay thế tốt hơn cho những gì bạn đang làm.

Bạn có thể bao gồm các tệp ẩn một cách rõ ràng (một thư mục cũng là một tệp).

grep -r search * .*

*sẽ khớp với tất cả các tệp ngoại trừ những tệp ẩn và .*sẽ chỉ khớp với các tệp ẩn. Tuy nhiên, điều này sẽ không thành công nếu không có tệp không ẩn hoặc không có tệp ẩn trong một thư mục nhất định. Tất nhiên bạn có thể thêm rõ ràng .gitthay vì .*.

Tuy nhiên, nếu bạn chỉ muốn tìm kiếm trong một thư mục nhất định, hãy làm như sau:

grep -r search .

Đường dẫn .sẽ khớp với đường dẫn hiện tại, sẽ bao gồm cả tệp không ẩn và tệp ẩn.


1
Cách tiếp cận đầu tiên (tìm kiếm grep -r *. *) Phù hợp với tôi. Cách tiếp cận thứ hai (tìm kiếm grep -r.) Không tìm thấy chuỗi. Tôi đã tìm thấy kết quả tương tự khi bỏ qua "-r" và chỉ tìm kiếm trong thư mục cấp cao nhất. Tôi đang sử dụng GNU grep 2.6.3.
Alan

@Alan: Lạ thật. Tôi sử dụng cái này thường xuyên. Bạn đã thử nó trên cùng một thư mục?
bitmask

27
sử dụng .*sẽ bao gồm thư mục mẹ (vì ..phù hợp)
sehe

1
Có an toàn để khái quát về giải pháp này không vì bahavior có thể khác nhau giữa các shell?
astletron

6
cho phiên bản đầu tiên bạn nên thêm --exclude-dir = .. để tránh tìm kiếm trong các thư mục mẹ
user762353

12

Tôi vừa gặp sự cố này và dựa trên câu trả lời của @ bitmask, đây là sửa đổi đơn giản của tôi để tránh vấn đề được chỉ ra bởi @sehe:

grep -r search_string * .[^.]*

Tôi không nhận được bất kỳ kết quả nào khi sử dụng cái này: sudo grep -r ANDROID_HOME * .[^.]*tôi đang làm gì sai ở đây?
messerbill

@messerbill Bạn đang chạy tìm kiếm ở đâu?
insaner

3

Có lẽ bạn sẽ thích kết hợp "grep" với lệnh "find" để có giải pháp hoàn chỉnh như:

find . -exec grep -Hn search {} \;

Lệnh này sẽ tìm kiếm bên trong các tệp hoặc thư mục ẩn cho chuỗi "tìm kiếm" và liệt kê bất kỳ tệp nào trùng hợp với định dạng đầu ra này:

Đường dẫn tệp: Số dòng: dòng trùng

./foo/bar:42:search line
./foo/.bar:42:search line
./.foo/bar:42:search line
./.foo/.bar:42:search line

2

Bạn có thể muốn sử dụng phương pháp này, giả sử bạn đang tìm kiếm thư mục hiện tại (nếu không, hãy thay thế bằng thư mục mong muốn):

find . -type f | xargs grep search

hoặc nếu bạn chỉ muốn tìm kiếm ở cấp cao nhất (kiểm tra nhanh hơn nếu bạn đang thử những thứ này):

find . -type f -maxdepth 1 | xargs grep search

CẬP NHẬT: Tôi đã sửa đổi các ví dụ theo nhận xét của Scott. Tôi cũng đã thêm "-type f".


1
(1)  ~là thư mục chính của người dùng. Câu hỏi không phải về thư mục chính của người dùng, vì vậy câu trả lời không nên đề cập đến  ~. (2) Trong một findlệnh, -name '*'là một  lệnh cấm (nghĩa là nó không phục vụ mục đích).
Scott

1

Để CHỈ tìm kiếm trong tất cả các tệp và thư mục ẩn từ vị trí hiện tại của bạn:

find . -name ".*" -exec grep -rs search {} \;

CHỈ tất cả các tệp ẩn:

find . -name ".*" -type f -exec grep -s search {} \;

CHỈ tất cả các thư mục ẩn:

find . -name ".*" -type d -exec grep -rs search {} \;

1

Tất cả các câu trả lời khác là tốt hơn. Điều này có thể dễ nhớ:

find . -type f | xargs grep search

Nó chỉ tìm thấy các tệp (bao gồm cả ẩn) và chia nhỏ từng tệp.


0

Để chỉ tìm thấy trong một thư mục nhất định, bạn có thể sử dụng:

ls -al | grep " \."

Đây là một lệnh rất đơn giản để liệt kê và chuyển sang grep.


0

Ngoài đề xuất của Tyler, Đây là lệnh để chuyển đổi một cách đệ quy tất cả các tệp và thư mục bao gồm các tệp ẩn

find . -name "*.*" -exec grep -li 'search' {} \;

0

Để ngăn đối sánh ...không phải là tệp ẩn, bạn có thể sử dụng grepvới ls -Anhư trong ví dụ này:

ls -A | grep "^\."

^\. nói rằng ký tự đầu tiên phải là .

Các -Ahoặc --almost-alltùy chọn không bao gồm các kết quả ...để các file và thư mục chỉ ẩn được khớp.


0

Bạn cũng có thể tìm kiếm các loại tệp ẩn cụ thể như vậy đối với tệp thư mục ẩn:

grep -r --include=*.directory "search-string"

Điều này có thể hoạt động tốt hơn một số tùy chọn khác. Các tùy chọn khác hoạt động có thể quá chậm.

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.