試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

ファイルやディレクトリの最終更新日時を変更する

ファイルやディレクトリのタイムスタンプ(最終更新日時と最終アクセス日時)は簡単に変更できる。ただし、最終属性変更日時(ctime)だけはその性質上、変更できない。
ここでは、主にtouchコマンドを使用した最終更新日時(mtime)と最終アクセス日時(atime)の操作に関してを扱う。

  1. touchコマンドにおけるタイムスタンプの種類の指定について
  2. タイムスタンプを現在の日時に変更する
  3. タイムスタンプを任意の日時に変更する
  4. タイムスタンプのコピー
  5. タイムスタンプを保持してコピー

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

-m(最終更新日時)オプションと-a(最終アクセス日時)オプションの内、片方だけが指定された場合に限り、そのタイムスタンプだけが変更される。両方が指定された場合もしくはされなかった場合には、両方のタイムスタンプが変更される。

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

特にオプションを付けない場合、現在の日時に変更される。

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

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

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

-tオプションでは、任意のタイムスタンプが指定できる。

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

書式としては、「200805311234.56」(2008/05/31 12:34:56の場合)のような形になる。秒だけドットの後ろになる点に注意。
確認するにはstatが便利。下は「200805311234.56」を指定した対象に対して最終更新日時を確認している例。

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

タイムスタンプのコピー

あるファイルのタイムスタンプ情報を別のファイルやディレクトリにコピーすることができる(内容はコピーされない)。

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

タイムスタンプを保持してコピー

ファイルをコピーするcpコマンドには、タイムスタンプを保持してファイルやディレクトリをコピーすることができる。

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

cp -a」は「cp -d*1pR*2」と等価。

関連URL:

*1:シンボリックリンクとハードリンクを「リンクとして」そのままコピーする

*2:ディレクトリもコピー・更にファイル/ディレクトリ以外もそのままコピー