4

サブディレクトリやその他のファイルを含むディレクトリがあり、日付/タイムスタンプを別のファイル/ディレクトリの日付/タイムスタンプで再帰的に更新したいと考えています。

私はそれを知っています:

touch -r file directory

ファイルまたはディレクトリの日付/タイムスタンプを他のものと変更しますが、その中は何も変更しません。次の検索バージョンもあります。

find . -exec touch -mt 201309300223.25 {} +\;

実際のファイル/ディレクトリを指定し、別の日付/タイムスタンプを使用できれば、これはうまく機能します。これを行う簡単な方法はありますか?さらに良いことに、「cp」を実行するときにタイムスタンプの変更/更新を回避する方法はありますか?

4

2 に答える 2

2

さらに良いことに、「cp」を実行するときにタイムスタンプの変更/更新を回避する方法はありますか?

はい、次のオプションで使用cpします。-p

-p

--preserve=mode,ownership,timestamps と同じ

- 保存

指定された属性 (デフォルト: モード、所有権、タイムスタンプ) を保持し、可能であれば追加の属性: context、links、xattr、all

$ ls -ltr
-rwxrwxr-x 1 me me  368 Apr 24 10:50 old_file
$ cp old_file not_maintains    <----- does not preserve time
$ cp -p old_file do_maintains  <----- does preserve time
$ ls -ltr
total 28
-rwxrwxr-x 1 me me  368 Apr 24 10:50 old_file
-rwxrwxr-x 1 me me  368 Apr 24 10:50 do_maintains   <----- does preserve time
-rwxrwxr-x 1 me me  368 Sep 30 11:33 not_maintains  <----- does not preserve time

touch別のパス上の対称ファイルに基づいてディレクトリ上のファイルを再帰的にするには、次のようなことを試すことができます。

find /your/path/ -exec touch -r $(echo {} | sed "s#/your/path#/your/original/path#g") {} \;

私にはうまくいきませんが、もう少し試してテストする必要があると思います。

于 2013-09-30T09:31:04.437 に答える
-1

「cp -p」に加えて、「touch -t」を使用して古いタイムスタンプを (再) 作成できます。詳細については、'touch' の man ページを参照してください。

touch -t 200510071138 old_file.dat
于 2013-09-30T09:34:25.853 に答える