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


※空白区切りで AND 検索 (例:「ファイル 削除」)

コマンド touch ファイルのタイムスタンプを変更・更新、ファイルを新規作成する

最終更新


touch コマンドは、ファイルのタイムスタンプを変更・更新する、空のファイルを新規作成する、という 2つの機能を持つコマンドである。

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

タイムスタンプの変更・更新
すでに存在するファイルに対して 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 コマンドのオプションを以下に示す。なお、--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
最終更新時刻のみを変更する。

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

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

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


頑張って書いたおすすめコンテンツ!
クラウドサービス徹底比較・徹底解説