怎样在Linux上查找所有不包含特定文本的文件
了解怎样在Linux命令行中列举目录中不包含特定文本的所有文件。
怎样在Linux命令行中查找所有不包含特定文本的文件?
有多种方式可以在Linux命令行中查找不包含特定文本的文件。我最喜欢的方式是在这儿使用Grep命令。
这与我查找包含特定文本的所有文件的操作类似。您可以使用带有选项“L”而不是“l”的相同grep命令来实现此目的。
grep -RiL "specific_text"
这将帮助您找到给定目录及其子目录中不包含指定字符串的所有文件。
让我用一个反例来展示这一点。
列举所有不包含文本的文件
我有以下文件和子目录:
-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

-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

./new/my_file.txt
正如您所听到的puppy linux,它显示了当前目录以及子目录中的所有不匹配文件。
不要步入子目录
倘若您只想在当前目录中搜索而不是子目录中如何办?
您可以指定*而不是.并删掉Grep的递归选项。
grep -iL LHB *
使用*时linux 搜索文件内容,它会搜索当前目录中的所有文件。这是现今的输出。
abhishek@linux-console:~/test$ grep -iL LHB *
file2.txt
line.txt

grep: new: Is a directory
new
grep: old: Is a directory
old
该错误消息是由于grep只能直接作用于文件名linux 搜索文件内容,而不能作用于目录名。您可以像这样跳过目录:
grep -iL -d skip LHB *
这给出了更清晰的输出:
abhishek@linux-console:~/test$ grep -iL -d skip LHB *
file2.txt
line.txt
倘若您只想在匹配特定模式的文件中搜索linux视频,可以将grep与findexec命令结合上去:
find . -iname "*.txt" -exec grep -Li "mystring" {} +
你是否使用其他方式来查找Linux中与该字符串不匹配的所有文件?请在评论部份与我们分享。