Инструмент ack.pl и флаги ack.pl

Я использую инструмент ack.pl для поиска строки или IP-адресов в файлах

Официальный сайт ack.pl – http://beyondgrep.com/documentation/

Пример командной строки ack.pl (хотите найти строку STRING_TO_FIND в файлах под / etc)

/tmp/ack.pl -Q -a -l --max-count=1 STRING_TO_FIND /etc 

Но иногда ack.pl застревает в файлах как:

  ---S--l--- 1 root root 0 Mar 10 04:25 /opt/POP_lock 

Из MAN paget «S» attr означает, что:

Используя верхний регистр «S» вместо строчного «s», он сообщает файловой системе немедленно записать файл на диск, вместо того, чтобы хранить его в буфере. (Заметим также, что на этот раз мы оставили атрибут «s», так что теперь у нас есть два атрибута, установленные для этого файла.)

Поэтому мой вопрос:

Как ack.pl может игнорировать файлы с помощью «S», или какие флагов ack.pl, которые игнорируют эти файлы с помощью «S»?

Вы уверены, что это проблема « S »? Как я объяснил в своем ответе на ваш предыдущий вопрос , « l » означает, что ваша операционная система и файловая система поддерживают обязательную блокировку файлов, а для этого файла включена принудительная блокировка файлов. Я сомневаюсь, что это совпадение, что оба файла, которые вы приводите в качестве примеров (в этом вопросе и в предыдущем), имеют имена, которые заканчиваются _lock . Вероятно, эти файлы – угадайте, что? – заблокирован! Это может помешать чтению их (или любой другой программы).
(Вышеупомянутый ответ на вопрос: «Почему не могу прочитать эти файлы?», Что, я понимаю, вы не спрашивали.)

Найдите все файлы, которые имеют бит режима « l », установленный с помощью

 find /etc -perm -2000 ! -perm -010 

(который я представил в своем ответе на ваш предыдущий вопрос). Посмотрите, имеют ли все файлы имена, заканчивающиеся на _lock . Тогда сделайте

 find /etc -name "*_lock" –ls 

чтобы убедиться, что все файлы _lock имеют бит бит режима « l ». Если существует взаимно-однозначное соответствие (или, вообще говоря, если нет файлов _lock которые вам нужно выполнить поиск), исключите их из поиска по шаблону имени файла.

У меня нет доступа к ack для тестирования, но из документации это похоже на то, что вы можете сделать это с помощью --ignore-file="match:/.*_lock/" или что-то еще как это.