Queue et grep récursivement?


1

Essayer de tailtrouver une liste de domaines pour rechercher un code pirate. Tous les fichiers que je cherche sont les mêmes, alors j'essayais quelque chose comme ceci:

grep -rnl * -e "Ai9LbaFz7lC13SwzDxAYT72vwA"

Essayer de voir le nom de fichier / répertoire aussi.

Cependant, cela recherche dans tout le fichier et cela peut représenter une perte de temps et d’ordinateur, alors essayez de l’écrire avec, tailcar je n’ai besoin que de chercher dans une petite partie du fichier. Cela a fonctionné:

tail -n10 * | grep --line-buffered -e '^==> .* <==$' -e 'Ai9LbaFz7lC13SwzDxAYT72vwA'

Cependant, tailil ne semble pas être récursif, donc il ne restera que dans son répertoire. Je ne suis définitivement pas un maître du code, alors j'espère que quelqu'un pourra me diriger dans la bonne direction.

Merci.

Réponses:


2

La commande tail doit lire l’ensemble du fichier pour calculer les dix dernières lignes. Il détermine les lignes en recherchant les caractères de nouvelle ligne. Donc, il lit le fichier à la recherche de chaînes fixes.

Votre grep, en revanche, lit l'intégralité du fichier à la recherche d'une chaîne fixe. Cela ressemble à peu près à la même chose. Certes, le grep est un peu plus complexe, mais je parie que le temps nécessaire pour forger un nouveau processus et la mise en place des tuyaux est plus que le temps supplémentaire nécessaire pour grep. Vous pouvez cependant accélérer un peu grep en lui disant que votre modèle est une chaîne fixe plutôt qu'une expression rationnelle. Pour ce faire, spécifiez l'option "-F" sur grep (ou utilisez fgrep). Si vous avez GNU grep, vous pouvez probablement aussi utiliser --mmap pour accélérer les choses.

Donnez grep -rnl * --mmap -F -e "Ai9LbaFz7lC13SwzDxAYT72vwA"un essai et voir si peut - être il est aussi rapide ou plus rapide que votre solution avec la queue. :)

La précision de l’analyse grep-only est une autre question, car elle n’a toujours pas validé le fait que la correspondance figure dans les 10 dernières lignes du fichier. Mais j'espère passer sous silence cette partie en suggérant l'utilisation d'une commande de post-traitement pour compter les lignes dans les fichiers correspondants ou quelque chose du genre. ;)


1

frapper:

shopt -s globstar nullglob

for f in **; do
    if [[ -f $f ]] && tail -n 10 "$f" | grep -q --options 'pattern'; then
        echo "$f"
    fi
done
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.