ファイルやディレクトリの最終更新日時や最終アクセス日時を変える方法

Last modified: 2021-10-11

ファイルやディレクトリの最終更新日時(mtime)と最終アクセス日時(atime)は簡単に変更ができる。

最終属性変更日時(ctime)だけはその性質上、変更はできない。

touchコマンド

最終更新日時や最終アクセス日時の変更にはtouchコマンドを用いる。

ここでは、主にtouchコマンドを使用した最終更新日時と最終アクセス日時の操作に関してを扱う。

書式

$ touch ([オプション...]) [対象ファイルもしくはディレクトリ...]

対象ファイルが存在しない場合、指定されたパス名の空(ファイルサイズが0)のファイルを作成するのだが、空ファイルを作成する用途で役に立つことがある。

touchコマンドにおけるタイムスタンプの種類の指定

  • -m(最終更新日時)オプション
  • -a(最終アクセス日時)オプション

の内、片方だけが指定された場合に限り、そのタイムスタンプだけが変更される。

両方が指定された場合にもされなかった場合にも、両方のタイムスタンプ情報が変更される。

タイムスタンプを現在の日時に変更する

日時を指定するために使われる-t-rといったオプションを付けない場合、現在の日時に変更される。

タイムスタンプを任意の日時に変更する

-tオプションで日時を指定することで、タイムスタンプを任意の日時に変更できる。

$ touch -t [タイムスタンプ文字列] ([オプション...]) [対象ファイルもしくはディレクトリ...]

タイムスタンプ文字列は “YYYYMMDDhhmm.ss” 形式1または現在の年を前提とした “MMDDhhmm.ss” 形式2で、“2008年7月21日 19時45分45秒"の場合は200807211945.45となり、現在の年の “8月16日 7時14分22秒” の場合は08160714.22となる。

秒だけドットの後ろになる点に注意。

設定されたタイムスタンプ情報を確認するにはstatコマンドが便利。

下は200805311234.56を指定した対象に対して最終更新日時を確認している例。

$ stat [対象ファイルもしくはディレクトリ] | grep Modify
Modify: 2008-05-31 12:34:56.000000000 +0900

タイムスタンプ情報のコピー

-rオプションを用いると、ファイルやディレクトリのタイムスタンプ情報のみを別のファイルやディレクトリにコピーすることができる。

$ touch -r [元ファイルもしくはディレクトリ] [対象ファイルもしくはディレクトリ...]

データ本体はコピーされない。

タイムスタンプを保持してファイルやディレクトリをコピー

ファイルをコピーするcpコマンドは、通常はタイムスタンプ情報をコピー先に複製することはない。

ただし、オプション指定によってはタイムスタンプ情報を保持してファイルやディレクトリをコピーすることができる。

$ cp -p [元ファイル] [コピー後のファイル名]
$ cp -a [元ファイルもしくはディレクトリ] [コピー後のファイル/ディレクトリ名]

-pオプションでコピーされる情報の中にはタイムスタンプ情報も含まれ、-aオプションは-d3-R4--preserve=all5の全てを指定したものと等価となる。


  1. 西暦年[4桁] + 月[2桁] + 日付[2桁] + 時[2桁] + 分[2桁] + “.” + 秒[2桁] ↩︎

  2. 月[2桁] + 日付[2桁] + 時[2桁] + 分[2桁] + “.” + 秒[2桁] ↩︎

  3. シンボリックリンクとハードリンクを “リンクとして” そのままコピーする ↩︎

  4. ディレクトリもコピーし、更にファイル/ディレクトリ以外もそのままコピー ↩︎

  5. コピー時にコピー元から全ての属性も一緒に複製する ↩︎