2013-12-16 33 views
21

Có thể bỏ qua nhiều thư mục trong Ack mà không lặp lại cờ không?Ack - Bỏ qua nhiều thư mục mà không lặp lại cờ

ví dụ: Tôi biết công trình sau đây (tức là thiết lập nhiều cờ):

ack --ignore-dir=install --ignore-dir=php 'teststring' 

Tôi đã hy vọng rằng tôi có thể tách các thư mục bằng dấu phẩy, như tôi có thể làm gì với các phần mở rộng như sau:

ack --ignore-file=ext:css,scss,orig 'teststring' 

Tuy nhiên , cờ bỏ qua được phân tách bằng dấu phẩy sau không hoạt động:

ack --ignore-dir=install,php 'textstring' 

Có thể sử dụng một số tương đương ngắn, vì vậy tôi không có e liên tục gõ cờ --ignore-dir?

Trả lời

0

Một cách tiếp cận có thể là chọn các thư mục đó để loại trừ bằng cụm từ thông dụng trong tùy chọn -G được bổ sung với tùy chọn --invert-file-match. Có trụ sở tại câu hỏi của bạn, giống như sau:

ack -a -G 'install|php' --invert-file-match 'textstring' . 
+0

Thú vị, nhưng tôi không nghĩ rằng đây là khả thi trong Ack 2. Tôi nhận được thông báo sau: 'Tùy chọn '-a' không hợp lệ trong ack 2 Điều này là do chúng tôi hiện có các loại -k/- được biết đến, nó chỉ chọn các tệp của các loại đã biết, thay vì bất kỳ tệp văn bản nào (đó là hành vi của ack 1.x). Bạn có thể có các tùy chọn trong .ackrc hoặc trong biến môi trường ACKRC_OPTIONS. Thử sử dụng giải pháp --dump flag' – SparrwHawk

+0

@ Birei chỉ hoạt động trên ack 1.x. Các cờ -a và -G đã được loại bỏ trong ack 2 để ủng hộ cờ -x. –

12

Vì bạn đang sử dụng ack 2, bạn có thể đặt --ignore-dir=install--ignore-dir=php trong một file .ackrc trong thư mục gốc của dự án của bạn. Sau đó, mọi lời kêu gọi ack trong cây đó sẽ sử dụng những lá cờ đó.

31

Nó thực sự tương tự như cách bạn sẽ xác định mô hình bao gồm cho grep:

ack <term> --ignore-dir={dir_a,dir_b}

Tuy nhiên, định dạng này không làm việc với một thư mục duy nhất. Vì vậy,

ack <term> --ignore-dir={log}

sẽ không hoạt động.

+8

Lưu ý rằng cú pháp {} gây ra bash-mở rộng - nó không cụ thể đối với ack. Hãy thử điều này tại dòng lệnh của bạn: 'echo this is cool {1,2}' – AgentLiquid

+0

@AgentLiquid Tôi không biết điều đó. Cảm ơn! :) –

+4

Nó cũng quan trọng để chỉ ra rằng bởi vì mở rộng cú đúp là một tính năng bash-cụ thể, bạn sẽ không thể tận dụng lợi thế của nó trong tập tin '.ackrc' của bạn. Thay vào đó, bạn sẽ cần phải liệt kê từng tùy chọn '--ignore-dir =' riêng lẻ. – wpcarro

5

Vì vậy, để bỏ qua thư mục duy nhất sử dụng

ack <term> --ignore-dir=dir_a 

và bỏ qua nhiều thư mục sử dụng

ack <term> --ignore-dir={dir_a,dir_b} 
Các vấn đề liên quan