Почему не работает мой ack --ignore-dir?

Я пытаюсь найти строку на всем своем сервере, исключая dev / (-R) с помощью ack. Пока у меня есть

sudo ack -i --ignore-dir=dev * foo

--version ack v1.39 

Но я получаю сообщение об ошибке. Где я ошибаюсь?

Любая помощь или совет по этому поводу приветствуются.


person edev.io    schedule 12.12.2012    source источник


Ответы (1)


Во-первых, всякий раз, когда вы говорите «Я получаю сообщение об ошибке», измените его на «Я получаю следующую ошибку», а затем сообщите нам, в чем заключается ошибка. Ошибка важна для нас, чтобы помочь диагностировать проблему.

Во-вторых, используемая вами версия ack очень старая. Последний - 1,96.

В-третьих, ваши аргументы не в порядке. Вы ищете "foo", верно? Тогда вы должны делать «ack foo *», а не «ack * foo».

Вы не должны указывать «*» для имени файла. Позвольте ack найти файл за вас. Если «dev» - это каталог в каталоге, из которого вы вызываете, тогда «ack *» будет расширяться до «ack dev [другие каталоги]», что явно указывает ack на поиск в каталоге «dev», который переопределяет --ignore-dir директива.

Что вам следует делать:

ack -i --ignore-dir=dev foo

И затем вы позволяете ack выполнять поиск файлов. Вы должны указывать имена файлов в командной строке только в том случае, если по какой-то причине вам нужно переопределить файлы, которые находит ack.

Наконец, вам, вероятно, вообще не следует использовать ack для этой задачи. ack специально предназначен для поиска исходного кода, и он не будет искать файлы, которые не учитывает исходный код. Если вы просматриваете весь сервер, то вы, вероятно, захотите искать и файлы, не являющиеся исходным кодом, верно? Используйте для этого grep.

person Andy Lester    schedule 12.12.2012
comment
Спасибо за ваш ответ. Работал отлично - person edev.io; 12.12.2012
comment
Когда вы говорите «отлично», вы уверены? Являются ли ВСЕ файлы, которые, по вашему мнению, будут подвергаться поиску, своего рода исходным кодом, который распознает ack? Например, ack не выполняет поиск файлов .cfg или .txt, а также файлов без расширений. Он только ищет файлы того типа исходного кода, который он распознает. Когда вы говорите "весь мой сервер", это не похоже на то, что вы хотите искать только исходный код. - person Andy Lester; 12.12.2012
comment
вариант использования немного сложен. По сути, старый системный администратор стал мошенником, и я, веб-разработчик, провожу поиск по серверу, чтобы дважды проверить все файлы с их именем. Это на всякий случай, если есть что-то неприятное, о чем я уже не знаю (после userdel, ssh revoke и т. д.) Я пробовал это с помощью grep раньше, но мне показалось, что это было слишком сложно для работы ... Поиски ускользают красиво и, похоже, делают свою работу. Примечание. Большинство проектов находится на Rails. Снова ура - person edev.io; 13.12.2012