方法1

方法1

次のように、ファイル名が数値に変更され続けるディレクトリがあります。

    -rw-rw----. 1 root root 10493952 May  7 10:39 A0000000.LOG
    -rw-rw----. 1 root root 10493952 May  7 08:38 A0000001.LOG
    -rw-rw----. 1 root root 10493952 May  7 08:38 A0000002.LOG
    ...
    ...
    -rw-rw----. 1 root root 10493952 May  7 08:38 A0000582.LOG
    ...
    and so on...

いつでも私のアプリケーションはリストされたファイルからファイル名を削除します。捨てなければならないそれファイルおよび次より大きい値を持つその他のファイルそれファイルをリモートホストに再同期する

アプリケーションがファイルを投げたとしますA0000096.LOG。私 A0000097.LOGも創造されるのを見るなら::

rsync A* --exclude A0000096.LOG --exclude A0000097.LOG user@remoteHost:/somedir/
  • 指示:

    • アプリケーションは、毎時間実行されるrsync cronジョブに異なるファイル名を生成します。この例では、ファイル名は次のようになります。A0000096.LOG

    • A0000096.LOGアプリケーション出力ファイル名(上記の例では)よりも高い値のファイルは、アプリケーション出力ファイル名と同じ生成日時スタンプを持つことができます。

    • rsyncが起動すると、アプリケーションの出力ファイル名は、より高い値を持つファイルよりも最新の日付/タイムスタンプを持つことができます。

    • より高い値のファイルが生成されない場合、または1つ以上のファイルが生成される可能性があります(おそらく10〜20個)

質問:この制限により、すべての親数値ファイルをrsync bashスクリプトに供給して除外する方法がわかりません。

助けてくれてありがとう。

ベストアンサー1

質問を正しく理解したら、A0000000.rsyncの範囲内のすべてのファイルを介してrsyncをしたいと思いますA0000095A*除外するファイル名を識別するのではなく、目的のファイル名を生成するために肯定的なワイルドカードリスト(globまたはファイル名拡張パターンとも呼ばれる)を使用するとは言わないでください。これは、範囲をサブ範囲に分割することによって達成されます。

         Subrange                         Wildcard
    A0000000-A0000089                 A00000[0-8][0-9]
    A0000090-A0000095                 A000009[0-5]

だからあなたは言うでしょう

rsync A00000[0-8][0-9] A000009[0-5] user@remoteHost:/somedir/

1つの例でこのアプローチを一般化できない場合は、97169を検討してください。

         Subrange                           Wildcard
    A0000000-A0089999                 A00[0-8][0-9][0-9][0-9][0-9]
    A0090000-A0096999                 A009[0-6][0-9][0-9][0-9]
    A0097000-A0097099                 A00970[0-9][0-9]
    A0097100-A0097159                 A00971[0-5][0-9]
    A0097160-A0097168                 A009716[0-8]

想像できるように、これらのワイルドカードの一部は既存のファイルと一致しません。この場合、

shopt -s nullglob

rsyncコマンドを実行し続け、失敗したワイルドカードを無視するようにシェルに指示します(たとえば、nullに拡張)。

おすすめ記事