Ich habe diesen Befehl find, um alle Dateien in den letzten 50 Sekunden geändert zu bekommen, die mit dem folgenden Regex hell\d
in den letzten 1000 Zeichen übereinstimmen. Ich verwende Tail, um die letzten 1000 Zeichen zu erhalten, um die Suche zu beschleunigen, da die zu überprüfenden Dateien riesig sind (durchschnittlich 3 GB).Wie zwei Befehle in -exec-Parameter von find kombinieren?
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
Es ist posible -exec
Parameter zu verwenden, die hässliche Schleife zu ersetzen und das Ergebnis noch schneller abrufen?
Dies funktioniert, aber ich weiß nicht, ob es der beste Weg, es zu tun:
find /home/ouhma -newermt '50 seconds' -type f -exec bash -c 'LANG=C LC_ALL=C grep -Pq "hell\d" <(tail -c 1000 "{}") && echo "{}"' \;
Wenn ich Ihren Befehl auf diese Weise testen: 'finden /home/ouhma/hello.txt -exec LC_ALL = C grep -pq 'Hölle \ d' <(tail -c 1000 {}) \; -exec echo {} \; ' Es gibt den folgenden Fehler zurück: ' tail: kann '{}' zum Lesen nicht öffnen: Keine solche Datei oder Verzeichnis finden: 'LC_ALL = C': Keine solche Datei oder Verzeichnis ' – harrison4
@ Ouhma Überprüfen Sie meine Änderungen. – heemayl
Das Erzeugen eines "Bash" für jede Datei ist nicht schneller als der Versuch von OP. – anubhava