我想要查找所有文件,并打印路径和文件名,对于任何使用文本“Numlock”的文件 - 无论是小写、大写还是混合大小写。
我应该使用什么命令?
答案1
您可以使用grep -r
递归搜索文件内容,例如
grep -Iri 'numlock' /path/to/search/dir/
/path/to/search/dir/
您想要开始搜索的顶级目录在哪里- 您可以使用/
但要做好花费很长时间的准备。
有一些变化,取决于您的具体要求:
- 如果您希望遵循符号链接,请将选项更改
-r
为-R
- 添加
-l
仅打印找到的文件名称的选项
告诉I
grep 忽略二进制文件并且i
使搜索不区分大小写。
如果你的 grep 版本不支持递归搜索,你可以使用 find 和 grep 的组合来实现同样的效果,例如
find /path/to/search/dir/ -type f -exec grep --color -HIi 'numlock' {} +
答案2
下面的脚本以递归方式在给定目录中搜索(文本)文件,以查找给定字符串的出现,无论它是大写还是小写,或者是它们的任意组合。
它将为您提供找到的匹配项的列表、文件的路径,以及文件名和文件中字符串的实际出现情况,如下所示:
/path/to/file1 ['numlock', 'numlocK']
/longer/path/to/file2 ['NuMlOck']
ETC。
为了限制搜索时间,我会在特定目录中寻找匹配项,因此不会搜索 2TB 的文件;)。
使用方法:
1] 复制以下文本,将其粘贴到空文本文件 (gedit) 中。2] 编辑 head 部分中的两行以定义要查找的字符串和要搜索的目录。3] 将其保存为 searchfor.py。4] 要运行它:打开终端,键入python3
+ space
,然后将脚本拖到终端窗口并按回车键。找到的匹配项列表将显示在终端窗口中
如果出现错误,脚本将会提及它。
#!/usr/bin/python3
import os
#-----------------------------------------------------
# give the searched word here in lowercase(!):
searchfor = "string_to_look_for"
# give the aimed directory here:
searchdir = "/path/to/search"
#-----------------------------------------------------
wordsize = len(searchfor)
unreadable = []
print("\nFound matches:")
for root, dirs, files in os.walk(searchdir, topdown=True):
for name in files:
file_subject = root+"/"+name
try:
with open(file_subject) as check_file:
words = check_file.read()
words_lower = words.lower()
found_matches_list = [i for i in range(len(words_lower)) if words_lower.startswith(searchfor, i)]
found_matches = [words[index:index+wordsize] for index in found_matches_list]
if len(found_matches) != 0:
print(file_subject, found_matches)
else:
pass
except Exception:
unreadable.append(file_subject)
if len(unreadable) != 0:
print("\ncould not read the following files:")
for item in unreadable:
print("unreadable:", item)