O script abaixo pesquisa arquivos (texto) em um determinado diretório recursivamente, para ocorrências de uma determinada string, não importando se ela está em maiúsculas ou minúsculas, ou qualquer combinação delas.
Ele fornecerá uma lista de correspondências encontradas, os caminhos para os arquivos, combinados com o arquivo e as ocorrências reais da string no arquivo, como:
/path/to/file1 ['numlock', 'numlocK']
/longer/path/to/file2 ['NuMlOck']
etc.
Para limitar o tempo de busca, procuraria correspondências em diretórios específicos, portanto, não para 2 TB de arquivos;).
Para usá-lo:
1] Copie o texto abaixo, cole-o em um arquivo de texto vazio (gedit). 2] Edite as duas linhas no cabeçalho para definir a string a ser pesquisada e o diretório a ser pesquisado. 3] Salve como searchfor.py. 4] Para executá-lo: abra um terminal, digite python3
+ space
, arraste o script para a janela de terminal e pressione Enter. A lista de correspondências encontradas aparecerá na janela do terminal
Em caso de erro, o script irá mencioná-lo.
#!/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)