touchはファイルのタイムスタンプを変更するコマンドだ。
また、存在しないファイル名を指定することで、内容の入っていないファイルを新規作成する機能も持っている。
タイムスタンプには3種類の日時がある。
日時はファイルの内容を書き換えた日時がmtimeと呼ばれる更新日時がある。
更新日時にプラスして、ファイルのアクセス権設定などを変更した日時ctimeがある。
最後にatimeという、所有者がファイルを読み取り以外の操作をした場合に変更となる日時がある。
touchコマンドは、mtimeとctimeを書き換える。
目次
touchコマンドの基本
コマンドの基本動作
使い方は、次のとおりだ。
$ touch ファイル名
ファイルa.datのファイルスタンプを現在にする場合は、次のコマンドだ。
$ touch a.dat
はじめは13:57であったファイルa.datのタイムスタンプがtouchコマンド実行後に13:58に変更された。
ファイルの新規作成
ファイルの新規作成の方法も上記と全く同じだ。
$ touch a.dat
はじめは存在しなかったファイルa.datのタイムスタンプがtouchコマンド実行後に新規作成された。
touchコマンドのオプションたち
オプションの一覧
後から詳細をご紹介するが、まずは一覧で見てみよう。
オプション -d(オプション--date=STRING)
日時を指定する
オプション -c(オプション--no-create)
ファイルを新規作成しない
オプション -r(オプション--reference=FILE)
他のファイルのタイムスタンプに合わせる
オプション -m
ctimeのみを変更する
-dオプション(--date=STRINGオプション):日時を指定する
日時を指定する書式は次のとおりだ。
$ touch -d 日付 ファイル名
ファイルa.datのタイムスタンプを2016年9月20日20:30に指定する場合は、次のコマンドだ。
$ touch -d "2016-9-20 20:30" a.dat
はじめは10月3日13:58だったファイルa.datのタイムスタンプが上記コマンド実行後、9月20日20:30に変更になった。
日時は""で囲む。
日本語は使えないが、日時として認識できる形であればある程度エラーにはならない。
"2/3 0:0"では、年は変更日の年となり2月3日の0時となる。
"23:58"では、変更日の23:58となる。
時刻は"3:23 pm"のような12時間表記にも対応する。
年は下2桁でも認識する。
月は"jan 25 1989"のように英語表記も可能だ。
-cオプション(--no-createオプション):ファイルを新規作成しない
オプションなしでは指定したファイル名のファイルがなければ新規作成するが、-cオプションを指定すれば新規作成は行わない。
書式は次の通りだ。
$ touch -c ファイル名
ファイルb.datのファイルが存在しなければ新規作成、存在していればタイムスタンプを書き換えるコマンドは次の通りだ。
$ touch -c b.dat
ファイルb.datが存在しないのでファイルは作成しなかった。
-rオプション(--reference=FILEオプション):他のファイルのタイムスタンプに合わせる
ファイルのタイムスタンプを指定するのではなく、既存のファイルのタイムスタンプと同一にするオプションで、書式は次の通りだ。
$ touch -r 既存のファイル名 対象ファイル名
ファイルa.datのタイムスタンプをファイルb.datのタイムスタンプと同一に指定する場合は、次のコマンドだ。
$ touch -r b.dat a.dat
はじめは10月5日17:45だったファイルa.datのタイムスタンプが上記コマンド実行後、ファイルb.datのタイムスタンプ7月30日00:05に変更になった。
-mオプション:ctimeのみを変更する
ctimeのみを変更するオプションで書式は次の通りだ。
$ touch -m 対象ファイル名
ファイルa.datのctimeのみを2016年10月15日17:45に指定する場合は、次のコマンドだ。
$ touch -m a.dat
lsコマンドの-lオプションでctimeを表示し、-ulオプションでmtimeを表示し、-clオプションでatimeを表示している。
ファイルa.datのctimeのみを2016年10月15日17:45に変更になっている。
touch関連コマンド
最後にtouchコマンドに関連して、基本的なファイル操作のコマンドも紹介しておく
lsコマンド
ディレクトリやファイルの一覧を表示する。
catコマンド
ファイルの内容を表示する。
まとめ
このページでは、touchコマンドを使ったタイムスタンプの変更の方法を解説した。
touchコマンドを実行すると-dオプションで日付を指定したとしてもatimeは現在日付に書き換えられることに注意したい。
touchコマンドを実行するということは、読み取り以上にファイル内容を書き換えているのだ。
atimeのみを指定するオプション-aもtouchコマンドには用意されているが、実際には、touchコマンド実行時の日時がatimeに格納されるので常に現在時刻となる。
プログラムやシステムのファイルがすべて同じ日時になっているのを見たことがないだろうか。
パッケージプログラムラムなどは見た目を良くするために納品前にtouchコマンドでバラバラだったタイムスタンプを同一のものに書き換えていたりするのだ。
また、ファイルの作成日付はプログラム作成途中ではバージョン管理をする上で重要な要素であり、アーカイブでは常に新しいタイムスタンプのものが最新と判断されるため、touchコマンドの不要な操作は混乱を招くかもしれない。
ファイルスタンプ書き換えの操作は慎重に行おう。
コメント