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 inotifywaitich 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.fileund 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) ~/folderwird, 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 ~/foldernach Abschluss des Vorgangs überprüft , aber sie stimmen nicht mit der inotifywaitAusgabe ü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.filewährend sie geschrieben werden.
Kann mir bitte jemand eine elegante Lösung für dieses Problem vorschlagen?