inotifywaitで分割を試してください。デフォルトでは、FTPサーバーでファイルが作成されるとファイルが分割されます。
#!/bin/bash
TARGET=/home/test-directory/incoming
SPLITTED=/home/test-directory/incoming/splitted
PROCESSED=/home/test-directory/incoming/processed
LOGFILE=/var/log/inotify-ftp.log
inotifywait -m -e create -e moved_to --format "%f" $TARGET \
| while read FILENAME
do
echo Detected $FILENAME >> $LOGFILE
echo Splitting $FILENAME >> $LOGFILE
split -d -l 1000 "$TARGET/$FILENAME" "$SPLITTED/$FILENAME"
#/usr/bin/split -d -l 1000 /home/test-directory/incoming/test-file.csv /home/test-directory/incoming/splitted/test-file.csv
mv "$TARGET/$FILENAME" "$PROCESSED/$FILENAME"
echo Completed splitting $FILENAME >> $LOGFILE
done
したがって、以下のコードは単独で実行しても機能します。上記のスクリプトは同じことを行う必要がありますが、長さが数百行しかない最初のパーティションファイルを生成します。
#/usr/bin/split -d -l 1000 /home/test-directory/incoming/test-file.csv /home/test-directory/incoming/splitted/test-file.csv
どうしたの?
ベストアンサー1
これは、ファイル長がゼロで生成されたためです。スプリットがファイルサイズを特定し、スプリット方法を決定しますが、ftpサーバーにはファイルサイズを増やすための競合状態があります。
分割が読み取りを開始する前にファイルが完全に到着するのを待つメカニズムを用意することは賢明でしょう。通常、統計ファイルは前の1分間に増加が停止するまで繰り返されます。