быстрый способ найти текстовые файлы, не заканчивающиеся указанной строкой - PullRequest
2 голосов
/ 14 апреля 2020

У меня много файлов xml, и я хочу проверить их полноту, проверив, заканчиваются ли они тегом </root>.

grep -L "</root>" *.xml

делает хитро, но довольно медленно ( слишком много и больших файлов). Есть ли более быстрое решение?

1 Ответ

1 голос
/ 14 апреля 2020

Для больших файлов, если вы уверены, что целевая строка находится в конце их, используйте tail:

tail -n 10 filename.xml | grep "</root>" # will check the last 10 lines for the pattern

Проверено на текстовом файле ~ 7 ГБ, одиночные grep ~ 20 с, с tail меньше 0,01 с

Для количества файлов (и печатаемых имен файлов, которые НЕ содержат шаблон):

for f in *.xml ; do tail -n 10 "$f" | grep -q "</root>" || echo "$f" ; done
...