UNIX/Linuxの部屋 touchコマンドの使い方

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド touch ファイルのタイムスタンプを変更・更新、ファイルを新規作成する このエントリーをはてなブックマークに追加

最終更新


UNIX/Linux の touch コマンドは、以下の 3つの機能を持つコマンドである。
  • ファイルのタイムスタンプを現在時刻に変更・更新する。
  • ファイルのタイムスタンプを指定した日時・時刻に変更・更新する。
  • 空のファイルを新規作成する



タイムスタンプを現在時刻に変更・更新
すでに存在するファイルに対して touch コマンドを使うと、タイムスタンプを現在時刻に更新する。
% touch sample.txt
→ まずファイルを作成し、
% stat sample.txt
(略)
Access: 2017-05-25 13:02:21.109268293 +0900
Modify: 2017-05-25 13:02:21.109268293 +0900
Change: 2017-05-25 13:02:21.109268293 +0900
→ タイムスタンプを確認。
% touch sample.txt
→ ファイルが存在する状況で、再度 touch
% stat sample.txt
(略)
Access: 2017-05-25 14:52:32.788267848 +0900
Modify: 2017-05-25 14:52:32.788267848 +0900
Change: 2017-05-25 14:52:32.788267848 +0900
→ タイスタンプが、現在時刻に更新された。

タイムスタンプを指定の日時に変更・更新
ファイルのタイムスタンプを任意の日時・時刻に合わせたい場合は、新しめの touch コマンドであれば、-d オプションを使って、
% touch -d "2017-12-05T20:51:13.123" sample
% touch -d "2017-12-05T20:51:13.123" sample
と ISO 8601 形式で指定できる (新しめの touch で使えるはずというのは、POSIX.1-2008 で touch コマンドに -d オプションが規定されたため)。

さらに、Linux 系 OS で使用されている GNU coreutils の touch コマンドであれば、
% touch --date="2017-12-05T20:51:13.123" sample
→ -d ではなく --date オプション
% touch -d "2017-12-05 20:51:13.123" sample
→ T なし
% touch -d "2017/12/05 20:51:13.123" sample
→ ハイフンではなくスラッシュ
などと、比較的ゆるく受け入れてくれるであろう。

従来からの touch コマンドであれば、少々わかりづらくはあるが、-t オプションを使う。
タイムスタンプを 1月2日3時4分にしたい場合:
% touch -t 01020304 sample
⇒ 年は変更しない、ではなく、実行時の年に変わることに注意
2017年12月5日20時51分にしたい場合:
% touch -t 201712052051 sample
秒数まで設定する場合は`.'を付ける:
% touch -t 201712052051.15 sample

touch コマンドは、デフォルトでは最終アクセス時刻 (atime) と最終更新時刻 (mtime) の両方を変更する (これは -a オプションや -m オプションで挙動を変更できる)。また、最終ステータス変更時刻 (change time) を、touch した時刻に設定する。

空ファイルの新規作成
ファイルを新規に作成する場合は、
% touch sample.txt
とする。これでサイズが 0 のファイル sample.txt が作られる。なお、空ファイルの作成は、そのファイルが存在しない場合に行なわれる。すでにファイルが存在する場合はタイムスタンプが更新される。

touch コマンドのオプション
touch コマンドのオプションを以下に示す。なお、--xxxx 形式は、Linux 系 OS で使用されている GNU coreutils でのみ使用可能である。

▷ -c または --no-create
指定したファイルが存在しなかったら新しくファイルを作らない
▷ -f ファイルのパーミッションを無視してタイムスタンプを変更する。
▷ -r [ファイル名] または --reference=[ファイル名]
コマンドラインからタイムスタンプを指定せず、指定したファイルのタイムスタンプをコピーする。
% touch -r from.txt to.txt
→ from.txt のタイムスタンプを、to.txt にコピーする。
% touch -a -r from.txt to.txt
→ 最終アクセス時刻のみをコピー。
% touch -m -r from.txt to.txt
→ 最終更新時刻のみをコピー。
▷ -a または --time=atime
最終アクセス時刻のみを変更する。
▷ -m または --time=mtime
最終更新時刻のみを変更する。
▷ -t [[CC]YY]MMDDhhmm[.SS]
古い形式でのタイムスタンプ指定。
% touch -t 12312359 [ファイル名]
MMDDhhmm 形式。タイムスタンプを 12月31日23時59分に更新 (年は現在の年)。
% touch -t 1912312359 [ファイル名]
YYMMDDhhmm 形式。タイムスタンプを (20)19年12月31日23時59分に更新。YY が 69〜99 なら 19YY年、00〜68 なら 20YY年となる。
% touch -t 201912312359 [ファイル名]
CCYYMMDDhhmm 形式。タイムスタンプを 2019年12月31日23時59分に更新。YY が 69〜99 なら 19YY年、00〜68 なら 20YY年となる。
% touch -t 201912312359.01 [ファイル名]
CCYYMMDDhhmm.SS 形式。年月日時分秒まで指定。

関連コマンド
最終アクセス時刻や最終更新時刻などのタイムスタンプについての解説は以下の項を参照。

ファイルの最終更新時刻、最終アクセス時刻、最終ステータス変更時刻を表示したい場合は、ls コマンドや stat コマンドを使う。

指定したサイズのファイルを生成したい場合は、mkfile コマンドや dd コマンドを使う。
>> Linuxオンラインマニュアル(man) Linux touch(1)
>> FreeBSDオンラインマニュアル(man) FreeBSD touch(1)
>> Solaris10オンラインマニュアル(man) Solaris10 touch(1)