過去 1 時間に対象ファイルが変更したファイルを無視し、あるディレクトリから別のディレクトリにファイルをコピーしますか?

過去 1 時間に対象ファイルが変更したファイルを無視し、あるディレクトリから別のディレクトリにファイルをコピーしますか?

過去1時間でターゲット(ソースを除く)ファイルが変更されていない場合は、ファイルをコピーするコマンドの検索を試みます。

答え1

私が知っている限り、あなたが望むものを正確に実行するコマンドはありません。次のことがうまくいきます(--dry-run結果に満足すると確信している場合は削除し、--verboseより静かに実行するには次のように置き換えてください)。--quiet

src=/path/to/source
dst=/path/to/target

comm -z -23 \
        <(find "$src" -type f -printf '%P\0' | sort -z) \
        <(find "$dst" -type f -mmin -60 -printf '%P\0' | sort -z) |
    rsync --dry-run --verbose --archive --from0 --files-from - "$src" "$dst"

これは、比較的新しいユーティリティがNUL終了回線をどのように処理するかを理解していると仮定します。必要に応じて、ファイル名に改行文字が含まれていないことを保証できる限り、コマンドから3つの-zフラグを削除して置き換えることができます。rsync--from0\0find\n

答え2

すべてのコピーが既存のファイルの場合は、別の方法で表示できます。つまり、ローカルファイルが1時間以上古い場合は上書きされます。だから、目的地ディレクトリを作業ディレクトリとして:

find . -mindepth 1 -maxdepth 1 -type f -mmin +60 -exec cp /source/directory/{} . \;

どこ:

  • find . -mindepth 1 -maxdepth 1 -type f -mmin +601時間以上古いローカルファイルを探す
  • -exec cp /source/directory/{} . \;同じ名前の名前で上書き/source/directory

関連情報