一部のファイルを除外するrsyncオプション

一部のファイルを除外するrsyncオプション

rsync同じコンピュータにある2つのフォルダを同期するために使用します。

ファイルは他のアプリケーションのソースフォルダに書き込まれます。私たちが持っている問題は、ファイルがソースフォルダに完全に書き込まれていない場合でも、rsyncがファイルをターゲットにコピーすることです。

確認/転送する方法/オプションはありますか?ただソースフォルダのフルファイル

ベストアンサー1

そのような概念が存在しないため、部分ファイルを除外することは不可能です。クリエイターがファイルを作成すると、ファイルは存在しますが、最初は空になってから徐々に入力されます。

ファイルが書き込み用に開いていることをテストすると、ファイルが不完全であることがわかります。しかし、これは信頼できません。プロデューサーがクラッシュすると(プロセスがクラッシュした場合、またはシステム全体がクラッシュした場合)、完全に見える不完全なファイルが生成されます。

あなたがしなければならないのは、プロデューサーがファイルを完了としてマークするためのプロトコルを定義することです。これを行う一般的な方法(そしてほぼ唯一の合理的な方法)は、クリエイターが一時的な場所にファイルを作成し、rename作業が完了したらそのファイルをその場所(システムコールまたはシェルコマンドを使用して)に移動することです。mv

命名規則を使用できます。

  • プロデューサー:を書き$FILENAME.tmp、最終ファイルに移動します。

    generate_data >"dir/$FILENAME.tmp"
    mv "dir/$FILENAME.tmp" "dir/$FILENAME"
    
  • 消費者:.tmpファイルを除外します。

    rsync -a --exclude='*.tmp' dir remote:
    

または、準備ディレクトリを使用できます。

  • プロデューサー:準備ディレクトリに書き込み、最終位置に移動します。

    generate_data >"dir/staging/$FILENAME"
    mv "dir/staging/$FILENAME" "dir/"
    
  • 消費者:準備ディレクトリを除外します。

    rsync -a --exclude='/staging' dir remote:
    

おすすめ記事