Estou tentando pesquisar o sistema de arquivos inteiro para um texto específico. Este comando faz isso, mas fica preso em certos diretórios como '/ proc':
find / -print0|xargs -0 grep whatever
O que eu gostaria de fazer é enviar apenas arquivos para o grep que não combinem com '/ sys' '/ proc' '/ tmp' '/ lib'.
Atualizar : Após a ajuda do Gary abaixo, precisei adicionar mais alguns diretórios excluídos, então decidi escrever um script python para fazer isso:
#!/usr/bin/python
import sys
import os
from os.path import join, getsize
import time
import re
search = "192.168.30"
searchRoot = "/"
reobj = re.compile(r"^/var|^/dev|^/proc|^/sys|^/bin|^/boot|^/home|^/lost|^/media|^/misc|^/mnt|^/net|^/sbin|^/selinux|\.log")
start = time.time()
for root, dirs, files in os.walk(searchRoot):
for name in files:
fullPath = os.path.join(root, name)
if not reobj.search(fullPath):
try:
fileSize = os.path.getsize(fullPath)
if (fileSize < 51200):
try:
#print fullPath
fileobj = open(fullPath, 'r')
text = fileobj.read()
fileobj.close()
index = text.find(search)
if (index > -1):
print index, ":", fullPath
sys.stdout.flush()
except:
pass
except:
pass
print "Completed search for", search, "in", searchRoot, "in", time.time() - start, "seconds."
-name
ou-path
jogos a termo,-prune
contafind
para parar de procurar essa ramificação da árvore do sistema de arquivos. Leia a página man find (1), a seção sobre-prune
opção para uma melhor explicação. Eu testei esse comando brevemente no meu sistema Fedora 14 e ele pareceu funcionar corretamente.