既存のファイルが特定の日付と一致しない場合にのみファイルの日付スタンプを再帰的に変更する方法は?

既存のファイルが特定の日付と一致しない場合にのみファイルの日付スタンプを再帰的に変更する方法は?

フォルダ(多数のファイルとサブフォルダ、数百GB)があります。私はrsyncを使ってフォルダをコピーしましたが、タイムスタンプを保持するのを忘れました。

これで、新しいフォルダに多くの新しいファイルが追加され、既存のファイルが修正されました。

古いフォルダのタイムスタンプを新しいフォルダにコピーする必要がありますが、2021年7月9日以降にファイルが変更されていない場合にのみ適用されます。

私はrsyncがこれを行うとは思わない。使用する必要があるようですが、touch -tすべてのファイルを処理する効率的な方法が必要です。もっと良い方法がありますか?または、7月9日以降にファイルが変更されていない場合は、どのようにすべてのファイルを処理してタイムスタンプを更新しますか?

ありがとうございます。

ベストアンサー1

以下は、機能する必要がある1行のコードです。

find /path/to/newdir -type f -not -newermt 09jul2021 -printf './%P\000' | rsync -r --files-from=- -0 --size-only --times /path/to/olddir/ /path/to/newdir/

コマンドの前半は、"newdir"2021年7月9日以降に変更されていないファイルのnull区切りリストを生成し、同期ディレクトリへの相対パス形式で指定されます。

コマンドの後半は対応するファイルのrsyncリストで実行され、変更タイムスタンプを"newdir"一致するように変更します。"olddir"

おすすめ記事