Tôi đang tìm kiếm thông qua kho lưu trữ Git và muốn bao gồm .git
thư 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ì?
Tôi đang tìm kiếm thông qua kho lưu trữ Git và muốn bao gồm .git
thư 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:
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 * .*
Nó *
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 .git
thay 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.
.*
sẽ bao gồm thư mục mẹ (vì ..
phù hợp)
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 * .[^.]*
sudo grep -r ANDROID_HOME * .[^.]*
tôi đang làm gì sai ở đây?
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
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".
~
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 find
lệnh, -name '*'
là một lệnh cấm (nghĩa là nó không phục vụ mục đích).
Để 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 {} \;
Để 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.
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' {} \;
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.