Was ich tun möchte, ist, ein Verzeichnis (nicht rekursiv, nur eines) auf neu erstellte Dateien zu überwachen und diese Dateien während des Schreibens an eine einzelne große Datei anzuhängen.
Die Anzahl der Dateien, die geschrieben werden, ist riesig und kann bis zu 50.000 erreichen.
Mit benutze inotifywait
ich das Verzeichnis wie folgt:
inotifywait -m -e create ~/folder | awk '($2=="CREATE"){print $3}' > ~/output.file
Ich speichere also Namen neuer Dateien, die in erstellt wurden, ~/output.file
und verwende dann eine for-Schleife
for FILE in `cat ~/output.file`
do
cat $FILE >> ~/test.out
done
Es funktioniert einwandfrei, wenn die Geschwindigkeit, mit der eine Datei geschrieben (erstellt) ~/folder
wird, 1 Datei pro Sekunde entspricht.
Die Anforderungen sind jedoch groß und die Rate, mit der die Dateien erstellt werden, ist sehr hoch, beispielsweise 500 Dateien pro Minute (oder sogar mehr).
Ich habe die Anzahl der Dateien ~/folder
nach Abschluss des Vorgangs überprüft , aber sie stimmen nicht mit der inotifywait
Ausgabe überein . Es gibt einen Unterschied von etwa 10 bis 15 Dateien, variiert.
Auch die Schleife
for FILE in `cat ~/output.file`
do
done
verarbeitet nicht alle Dateien, ~/output.file
während sie geschrieben werden.
Kann mir bitte jemand eine elegante Lösung für dieses Problem vorschlagen?