怎样在Linux上查找所有不包含特定文本的文件

了解怎样在Linux命令行中列举目录中不包含特定文本的所有文件。

怎样在Linux命令行中查找所有不包含特定文本的文件?

有多种方式可以在Linux命令行中查找不包含特定文本的文件。我最喜欢的方式是在这儿使用Grep命令。

这与我查找包含特定文本的所有文件的操作类似。您可以使用带有选项“L”而不是“l”的相同grep命令来实现此目的。

grep -RiL "specific_text" 

这将帮助您找到给定目录及其子目录中不包含指定字符串的所有文件。

让我用一个反例来展示这一点。

搜索文件内容查找文件_搜索文件内容命令_linux 搜索文件内容

列举所有不包含文本的文件

我有以下文件和子目录:

-rw-r--r-- 1 abhishek abhishek 12817 Sep 22 12:28 file1.txt
-rwxrw-r-- 1 abhishek abhishek 12813 Sep 22 12:29 file2.txt
-rw-r--r-- 1 abhishek abhishek 12817 Sep 22 12:29 file3.txt
-rw-rw-r-- 1 abhishek abhishek   311 Sep 22 12:19 line.txt
drwxrwxr-x 2 abhishek abhishek  4096 Aug 22 16:58 new
drwxrwxr-x 2 abhishek abhishek  4096 Aug 22 17:02 old

搜索文件内容命令_linux 搜索文件内容_搜索文件内容查找文件

-rw-r--r-- 1 abhishek abhishek 12817 Sep 22 12:28 sample.txt

我想列举所有不包含字符串LHB的文件。

grep -RiL LHB .

这是我得到的结果。

./line.txt
./old/gnome-console-voiceover
./file2.txt
./.some_config

搜索文件内容命令_搜索文件内容查找文件_linux 搜索文件内容

./new/my_file.txt

正如您所听到的puppy linux,它显示了当前目录以及子目录中的所有不匹配文件。

不要步入子目录

倘若您只想在当前目录中搜索而不是子目录中如何办?

您可以指定*而不是.并删掉Grep的递归选项。

grep -iL LHB *

使用*时linux 搜索文件内容,它会搜索当前目录中的所有文件。这是现今的输出。

abhishek@linux-console:~/test$ grep -iL LHB *
file2.txt
line.txt

linux 搜索文件内容_搜索文件内容查找文件_搜索文件内容命令

grep: new: Is a directory new grep: old: Is a directory old

该错误消息是由于grep只能直接作用于文件名linux 搜索文件内容,而不能作用于目录名。您可以像这样跳过目录:

grep -iL -d skip LHB *

这给出了更清晰的输出:

搜索文件内容命令_linux 搜索文件内容_搜索文件内容查找文件

abhishek@linux-console:~/test$ grep -iL -d skip LHB *
file2.txt
line.txt

倘若您只想在匹配特定模式的文件中搜索linux视频,可以将grep与findexec命令结合上去:

find . -iname "*.txt" -exec grep -Li "mystring" {} +

你是否使用其他方式来查找Linux中与该字符串不匹配的所有文件?请在评论部份与我们分享。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复