Как найти текстовые файлы, не содержащие текст в Linux? - PullRequest
34 голосов
/ 26 августа 2011

Как найти файлы , а не , содержащие текст в Linux?В основном я ищу обратное для следующих

find . -print | xargs grep -iL "somestring"

Ответы [ 3 ]

59 голосов
/ 26 августа 2011

Команда, которую вы цитируете, как ни странно, делает именно то, что вы описываете. Проверьте это!

echo "hello" > a
echo "bye" > b
grep -iL BYE a b

Говорит только.


Я думаю, вы можете сбить с толку -L и -l

find . -print | xargs grep -iL "somestring"

является обратным

find . -print | xargs grep -il "somestring"

Кстати, рассмотрим

find . -print0 | xargs -0 grep -iL "somestring"

Или даже

grep -IRiL "somestring" .
3 голосов
/ 07 июня 2019

Вы можете сделать это только с помощью grep (без поиска).

grep -riL "somestring" .

Это объяснение параметров, используемых на grep

     -L, --files-without-match
             each file processed.
     -R, -r, --recursive
             Recursively search subdirectories listed.

     -i, --ignore-case
             Perform case insensitive matching.

Если вы используете l в нижнем регистре, вы получите противоположное (файлы с совпадениями)

     -l, --files-with-matches
             Only the names of files containing selected lines are written
0 голосов
/ 06 июня 2018

Если вы используете «find», скрипт делает «grep» также в папке:

[root@vps test]# find  | xargs grep -Li 1234
grep: .: Is a directory
.
./test.txt
./test2.txt
[root@vps test]#

Используйте «grep» напрямую:

# grep -Li 1234 /root/test/*
/root/test/test2.txt
/root/test/test.txt
[root@vps test]#

или укажите в «find»параметры "-type f" ... даже если вы используете find, вы добавите больше времени (сначала список файлов, а затем создайте grep).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...