J'ai cette commande find pour obtenir tous les fichiers modifiés dans les 50 dernières secondes qui correspond à la regex suivante hell\d
dans les 1000 derniers caractères. J'utilise la queue pour obtenir les 1000 derniers caractères afin d'accélérer la recherche car les fichiers à vérifier sont énormes (3gb en moyenne).Comment combiner deux commandes dans le paramètre -exec de find?
find /home/ouhma -newermt '50 seconds' -type f |
while read fic; do
if tail -c 1000 "${fic}" | LANG=C LC_ALL=C grep -Pq 'hell\d'; then
echo "${fic}"
fi
done
Il est posible d'utiliser -exec
paramètre pour remplacer cette boucle laid et pour récupérer encore plus vite le résultat?
Cela fonctionne, mais je ne sais pas si c'est la meilleure façon de le faire:
find /home/ouhma -newermt '50 seconds' -type f -exec bash -c 'LANG=C LC_ALL=C grep -Pq "hell\d" <(tail -c 1000 "{}") && echo "{}"' \;
Si je teste votre commande de cette façon: 'trouver /home/ouhma/hello.txt -exec LC_ALL = C grep -PQ 'enfer \ d' <(queue -c 1000 {}) \; -exec echo {} \; ' Il renvoie l'erreur suivante: ' queue: impossible d'ouvrir '{}' pour la lecture: Aucun fichier ou répertoire trouvé: 'LC_ALL = C': Aucun fichier ou répertoire ' – harrison4
@ ouhma Vérifiez mes modifications. – heemayl
La création d'un 'bash' pour chaque fichier ne sera pas plus rapide que la propre tentative d'OP. – anubhava