2010-05-13 28 views
5

Tôi có lệnh find mà tôi chạy để tìm tệp có tên chứa foo.Làm cách nào để ngăn tìm thấy việc in các thư mục .git?

Tôi muốn bỏ qua thư mục .git. Lệnh dưới đây làm việc trừ nó in một gây phiền nhiễu .git bất cứ lúc nào nó bỏ qua một thư mục .git:

find . (-name .git) -prune -o -name '*foo*' 

Làm thế nào tôi có thể ngăn chặn sự bỏ qua .git danh bạ từ in đến đầu ra tiêu chuẩn?

+1

cú pháp '(-name .git)' chẳng có ý nghĩa – msw

+0

Ngay - tôi nghĩ rằng nó phải được \\ (-name .git \\) , chính xác? –

Trả lời

1

Hãy thử điều này một:

find . -name '*foo*' | grep -v '\.git' 

này vẫn sẽ đi qua vào các thư mục .git, nhưng sẽ không hiển thị chúng. Hoặc bạn có thể kết hợp với phiên bản của bạn:

find . (-name .git) -prune -o -name '*foo*' | grep -v '\.git' 

Bạn cũng có thể làm điều đó mà không cần grep:

find . (-name .git) -prune -printf '' -o -name '*foo*' -print 
+0

Được rồi - Tôi thấy rằng tôi không phải đặt dấu vân tay '' - tôi chỉ phải đặt dấu vân tay ở mặt sau của lệnh! Ví dụ: hoạt động này: tìm. \ (-name .git \) -prune -o -name '* foo *' -print Cảm ơn! –

+0

Sử dụng grep sau khi tìm kiếm là một mẹo xấu vì nhiều lý do. Xem xét sử dụng các tùy chọn dựng sẵn trong tìm kiếm để lọc –

8

Vì vậy, chỉ cho tầm nhìn tốt hơn:

find -name '.git*' -prune -o -name '*foo*' -print 

này cũng bỏ qua file .gitignore; lưu ý rằng dấu vết -in để bỏ qua việc in, -prune ngừng giảm dần nhưng không in dấu vân tay. Xoắn C;

+0

Dưới đây là cách tìm thư mục: tìm. -name '.git \ *' -prune -o -name '\ * foo \ *' -maxdepth 4 loại d -print – Lionel

2
find . -not -wholename "./.git*" -name "*foo*" 

hoặc, đúng hơn, nếu bạn không muốn xem .git/nhưng muốn tìm kiếm trong dirs khác có tên cũng bắt đầu với git (.git-foo/bar/...)

find . -not -wholename "./.git" -not -wholename "./.git/*" -name "*foo*" 

Một chút odder nhưng hiệu quả hơn vì nó mận khô toàn bộ .git dir:

find . -not \(-wholename "./.git" -prune \) -name "*foo*" 
Các vấn đề liên quan