Một trong những lệnh BASH yêu thích của tôi là:
find . -name '*.*' -exec grep 'SearchString' {} /dev/null \;
tìm kiếm nội dung của tất cả các tệp tại và bên dưới thư mục hiện tại cho SearchString được chỉ định. Là một nhà phát triển, điều này đôi khi có ích.
Tuy nhiên, do dự án hiện tại của tôi và cấu trúc của cơ sở mã của tôi, tôi muốn làm cho lệnh BASH này nâng cao hơn nữa bằng cách không tìm kiếm bất kỳ tệp nào trong hoặc bên dưới thư mục chứa ".svn" hoặc bất kỳ tệp nào có chứa ".svn" hoặc bất kỳ tệp nào có kết thúc bằng ".html"
Các trang MAN để tìm loại làm tôi bối rối mặc dù. Tôi đã thử sử dụng -prune và nó cho tôi hành vi kỳ lạ. Trong một nỗ lực để chỉ bỏ qua các trang .html (để bắt đầu), tôi đã thử:
find . -wholename './*.html' -prune -exec grep 'SearchString' {} /dev/null \;
và không có được hành vi mà tôi đã hy vọng. Tôi nghĩ rằng tôi có thể đang thiếu quan điểm của -prune. Các bạn có thể giúp tôi không?
Cảm ơn
grep -rl 'SearchString'
find
để tìm kiếm bên trong một tệp.
-name '*.*'
không tìm thấy tất cả các tệp: chỉ những tệp có .
tên của họ (việc sử dụng *.*
thường là một DOS-ism, trong khi trong Unix, bạn thường chỉ sử dụng *
cho điều đó). Để thực sự khớp tất cả, chỉ cần xóa hoàn toàn đối số : find . -exec ...
. Hoặc nếu bạn muốn chỉ áp dụng grep cho các tệp (và bỏ qua các thư mục) thì hãy làm find . -type f -exec ...
.
find
không phải là lệnh bash tích hợp mà là một chương trình riêng biệt