転送が完了した後にフォルダ内で新しいファイルを移動する

転送が完了した後にフォルダ内で新しいファイルを移動する

サーバーを借ります。一部の人は、割り当てられたフォルダ(私は使用を検討していますsftp)にいくつかのファイルをアップロードし、ファイル転送が完了したらサーバーの私のフォルダに移動したいと思います。新しいファイルがあるかどうかを検出できますが、watch転送が開始されるとファイルがそこにあり、私のスクリプトはファイル転送が完了する前にすぐにファイルを移動します。これが起こらないようにするにはどうすればよいですか?転送が完了したことを確認するスクリプトをどのように作成できますか?sftpログを作成できますか?ファイルを移動するためにそのログを検出することもできます。よろしくお願いします。

ベストアンサー1

doを使用すると、目的のinotifywait結果が得られます。コマンドを実行する前にファイルの書き込みが完了するのを待つ機能です。

以下は、フォルダに新しいファイルがあるかどうかを継続的に監視し、ファイルの書き込みが完了した後にループでコマンドを実行します。

WATCH_DIR=/directory/to/monitor
DEST_DIR=/x/y/z

/usr/bin/inotifywait --recursive --monitor --quiet -e moved_to -e close_write --format '%w%f' "$WATCH_DIR" | while read -r INPUT_FILE; do

mv "$0" "$DEST_DIR"

done

詳細な設定オプションについては、次を参照してください。https://linux.die.net/man/1/inotifywatch

おすすめ記事