SplitはBashで奇妙に動作します。

SplitはBashで奇妙に動作します。

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分間に増加が停止するまで繰り返されます。

おすすめ記事