解決策 1:
GNU tar には --newer-mtime オプションがあり、これには日付の引数が必要です。これはおそらく最後にバックアップを行ったときです。ファイルシステムを復元する作業の量に応じて、これは最後の完全バックアップである可能性があり、その場合は完全ダンプと最後の毎日を復元する必要があります。または、最後の増分バックアップ以降に実行することもできます。その場合、完全なダンプとその後のすべてのダンプを復元する必要があります。
このオプションは、ファイルの変更タイムスタンプに依存しているため、明示的に変更されている場合、バックアップがそれを見逃す可能性があります。
解決策 2:
incron ユーティリティは、ファイルシステム イベントが発生したときに、inotify を使用してコマンドを実行します。構成ファイルは crontab に似ていますが、時間の代わりにパスとイベントを指定します。
このコマンドは、バックアップ スクリプト (この場合、ファイルが変更された直後にバックアップが開始されます) にするか、ファイルを作成し、バックアップ スクリプトにそのファイルの存在を確認してから削除させることができます。ファイルが存在する場合、最後の実行以降にイベントの 1 つが発生しました。
解決策 3:
find はいつでもパイプできます の wc への出力 変更されたファイルの整数カウントを取得します:
find . -ctime 1 | wc -l
デビッドの答えはコードの変更が少なくて済みますが:)
解決策 4:
これはちょっと突飛なアイデアですが、md5sum と ls で少し遊んでみてください。
このアイデアは、1 つのファイルの md5sum のみを確認することであり、そのファイルは、監視しているディレクトリのファイル リストです。何も変わらない限り、md5sum は同じです。しかし、タイムスタンプが更新されると md5sum が変更され、新しい tar を実行して ftp サーバーに送信する必要があることがわかります。
このようなものから始めることができます
ls -lR /path/to/dir/ | md5sum > file_list.txt.md5
次に、古い md5 と現在の md5 の比較を追加する必要があります... etc
/ヨハン
解決策 5:
GNU find の最近のバージョンにはアクション「-quit」があり、find はすぐに検索を停止します:
<ブロック引用>— アクション:-終了
すぐに終了します (エラーが発生していない場合は戻り値ゼロで)。これは「-prune」とは異なります。「-prune」は整理されたディレクトリの内容にのみ適用されますが、「-quit」は検索をただちに停止させるだけだからです。子プロセスが実行されたままになることはありませんが、コマンド ラインで指定されたそれ以上のファイルは処理されません。たとえば、find /tmp/foo /tmp/bar -print -quit は「/tmp/foo」のみを出力します。 「-exec ... +」または「-execdir ... +」によって作成されたコマンドラインは、プログラムが終了する前に呼び出されます。
find-expression を使用して変更されたファイルを検索し、 -quit を使用してファイルが見つかったらすぐに停止することができます。これはスキャンを続行するよりも速いはずです。
-quit は fileutils V4.2.3 で追加されました