touchコマンド(ファイルの最終アクセス日時と最終修正日時を変更する)
形式
touch[-a][-c][-f][-m][-r パス名][-t 設定日時]パス名 ... touch[-a][-c][-f][-m]設定日時 パス名 ...
機能
指定したファイルの最終アクセス日時と最終修正日時を変更します。Windowsの場合はファイルの最終修正日時だけを変更します。
引数
変更する日時の種類
変更する日時の種類は-aオプションまたは-mオプションで指定します。-aオプションと-mオプションの両方とも指定していない場合,または,-aオプションおよび-mオプションの両方とも指定した場合は,ファイルの最終アクセス日時と最終修正日時の両方を変更します。ただし,Windowsの場合は,実際にはファイルの最終アクセス日時は変更されません。
設定する日時の指定
設定する日時は,-rオプション,-tオプションまたはMMDDhhmm[YY]形式の設定日時で設定します。これらのオプションの指定がない場合は,コマンドの実行日時が設定されます。
-tオプションおよびMMDDhhmm[YY]形式の設定日時に指定できる日時の範囲は,UTC(協定世界時)の1970年1月1日0時0分0秒〜2038年1月19日3時14分7秒です。指定した日時は,コマンド実行時のタイムゾーンによって解釈されます。
タイムゾーンが日本標準時(UTC+9)の場合に指定できる日時の範囲は,1970年1月1日9時0分0秒〜2038年1月19日12時14分7秒です。ただし,AIX,Windowsの場合,タイムゾーンが日本標準時(UTC+9)のときに指定できる日時の上限は2038年1月19日3時14分7秒です。
タイムゾーンは環境変数TZに設定されている値が使用されます。Windowsで環境変数TZが設定されていない場合は,コントロールパネルの「日付と時刻のプロパティ」ダイアログボックスに設定されているタイムゾーンが使用されます。なお,Windowsの場合,環境変数TZに設定したタイムゾーンと「日付と時刻のプロパティ」に設定したタイムゾーンを同じ値にする必要があります。
- -r パス名
-
ファイルに設定する最終アクセス日時および最終修正日時をここで指定したファイルパスから取得します。取得したファイルの最終日時は,-aオプションが指定されている場合は最終アクセス日時,-mオプションが指定されている場合は最終修正日時として設定されます。
ディレクトリ名を指定すると,指定したディレクトリから最終アクセス日時,および最終修正日時を取得します。
オプションを複数回指定した場合,最後に指定した値が有効になります。
-rオプションと-tオプションを両方指定した場合は,最後に指定されたオプションが有効になります。
- -t 設定日時
-
ファイルに設定する最終アクセス日時,最終修正日時に設定する日時を指定します。指定した日時は,-aオプションが指定されている場合は最終アクセス日時,-mオプションが指定されている場合は最終修正日時として設定されます。
オプションを複数回指定した場合,最後に指定した値が有効になります。
-rオプションと-tオプションを両方指定した場合は,最後に指定されたオプションが有効になります。
設定日時は次の形式で指定します。
[[CC]YY]MMDDhhmm[.SS]
- CC
-
西暦年の上2桁を指定します。
- YY
-
西暦年の下2桁を指定します。
CCを省略すると,CCには次の値が設定されます。
YYが69〜99の場合,CCには19が設定されます。
YYが00〜68の場合,CCには20が設定されます。
なお,CCとYYの両方の指定を省略した場合は,コマンド実行日時の西暦年が設定されます。
- MM
-
月を01〜12の範囲の数値で指定します。1桁の数値を指定する場合は先頭に0を指定してください。
- DD
-
日を01〜31の範囲の数値で指定します。1桁の数値を指定する場合は先頭に0を指定してください。
- hh
-
時を00〜23の範囲の数値で指定します。1桁の数値を指定する場合は先頭に0を指定してください。
- mm
-
分を00〜59の範囲の数値で指定します。1桁の数値を指定する場合は先頭に0を指定してください。
- SS
-
秒を00〜61の範囲の数値で指定します。1桁の数値を指定する場合は先頭に0を指定してください。秒の指定を省略した場合は00が設定されます。
なお,60〜61の値を指定して設定した場合,うるう秒への対応をしていないシステムでは,lsコマンドなどで日時を表示すると60のときは1秒,61のときは2秒繰り上げられた日時が表示されます。
- 設定日時
-
ファイルの最終アクセス日時,最終修正日時に設定する日時を指定します。指定した日時は,-aオプションが指定されている場合は最終アクセス日時,-mオプションが指定されている場合は最終修正日時として設定されます。
-rオプションまたは-tオプションを指定した場合は,ファイル名として扱われます。
指定した日時の桁数が8桁と10桁のどちらでもない場合はファイル名として扱われ,ファイルが存在しない場合はファイルが作成されます。
設定日時は次の形式で指定します。
MMDDhhmm[YY]
- MM
-
月を01〜12の範囲の数値で指定します。1桁の数値を指定する場合は先頭に0を指定してください。
- DD
-
日を01〜31の範囲の数値で指定します。1桁の数値を指定する場合は先頭に0を指定してください。
- hh
-
時を00〜23の範囲の数値で指定します。1桁の数値を指定する場合は先頭に0を指定してください。
- mm
-
分を00〜59の範囲の数値で指定します。1桁の数値を指定する場合は先頭に0を指定してください。
- YY
-
西暦年の下2桁を指定します。指定を省略した場合はコマンド実行日時の西暦年が設定されます。
なお,西暦年の上2桁には次の値が設定されます。
YYが69〜99の場合:19
YYが00〜68の場合:20
その他のオプション
- パス名
-
最終アクセス日時,最終修正日時を変更するファイルのパス名を指定します。パス名は複数指定できます。
指定したパスが存在しない場合は0バイトのファイルを新規に作成します。
- Windowsの場合
-
ディレクトリの最終修正日時は変更できません。ディレクトリ名を指定するとエラーとなります。また,存在するファイルに対して最終修正日時を変更する場合は,読み取り権限と書き込み権限が必要です。
- UNIXの場合
-
新規に作成したファイルのパーミッションは,umaskに従って設定されます。ディレクトリ名を指定すると,ディレクトリの最終アクセス日時,最終修正日時が変更されます。
また,スーパーユーザー以外のユーザーが,存在するファイルに対して最終アクセス日時や最終修正日時を変更する場合は,次の権限が必要です。
-
-tオプション,またはMMDDhhmm[YY]形式の設定日時の指定あり
ファイルの所有者の権限が必要です。
-
-tオプション,およびMMDDhhmm[YY]形式の設定日時の指定なし
ファイルに対する書き込み権限が必要です。
-
- -c
-
最終アクセス日時,最終修正日時を変更するファイルが存在しなかった場合,ファイルを作成しません。また,エラーメッセージは出力しません(エラー扱いとはしません)。
- -f
-
OSが提供するtouchコマンドとの互換のためのオプションです。指定しても無視されます。
ファイルに設定する最終アクセス日時と最終修正日時
日時を設定する-rオプション,-tオプション,またはMMDDhhmm[YY]形式の設定日時と,変更する日時の種類を指定する-aオプションまたは-mオプションの指定によって,ファイルの最終アクセス日時と最終修正日時は次のように設定されます。
- -rオプションを指定した場合
-
-rオプションに指定したファイルから取得した最終アクセス日時と最終修正日時は,パス名に指定したファイルの有無によって,次の表のように設定されます。
表8‒12 -rオプションを指定した場合に設定されるファイルの最終アクセス日時,最終修正日時 -aオプションと-mオプションの指定
パス名に指定されたファイルの有無
設定される最終アクセス日時
設定される最終修正日時
Windows
UNIX
-aだけを指定
存在する
−
◎
−
存在しない
○
◎
○
-mだけを指定
存在する
−
◎
存在しない
○
◎
-a,-mの両方を指定,
または
-a,-mとも指定なし
存在する
−
◎
◎
存在しない
○
◎
◎
- -tオプションまたはMMDDhhmm[YY]形式の設定日時を指定した場合
-
-tオプションまたはMMDDhhmm[YY]形式の設定日時で指定した日時は,パス名に指定したファイルの有無によって,次の表のように設定されます。
表8‒13 引数に設定日時を指定した場合に設定されるファイルの最終アクセス日時,最終修正日時 -aオプションと-mオプションの指定
パス名に指定されたファイルの有無
設定されるファイルの最終アクセス日時
設定されるファイルの最終修正日時
Windows
UNIX
-aだけを指定
存在する
−
◎
−
存在しない
○
◎
○
-mだけを指定
存在する
−
◎
存在しない
○
◎
-a,-mの両方を指定,
または
-a,-mとも指定なし
存在する
−
◎
◎
存在しない
○
◎
◎
- -rオプション,-tオプションおよびMMDDhhmm[YY]形式の設定日時を指定しないとき
-
-rオプション,-tオプションおよびMMDDhhmm[YY]形式の設定日時が指定されていない場合,パス名に指定したファイルの有無によって,次の表のように設定されます。
表8‒14 設定日時の取得および指定がない場合に設定されるファイルの最終アクセス日時,最終修正日時 -aオプションと-mオプションの指定
パス名に指定されたファイルの有無
設定されるファイルの最終アクセス日時
設定されるファイルの最終修正日時
Windows
UNIX
-aオプションだけを指定
存在する
−
○
−
存在しない
○
○
-mオプションだけを指定
存在する
−
○
存在しない
○
○
-a,-mの両方を指定,
または
-a,-mとも指定なし
存在する
−
○
○
存在しない
○
○
終了コード
終了コード |
意味 |
---|---|
0 |
正常終了。 |
1 |
エラー終了。
|
2 |
エラー終了。
引数に複数のファイルが指定されているときは,後続のファイルを処理します。 |
注意事項
-
UNIXの場合,-rオプションに指定するパス名,ファイルの最終アクセス日時と最終修正日時を変更するパス名にシンボリックリンク名を指定した場合,シンボリックリンク先のパスが対象となります。
Windowsの場合,シンボリックリンクはサポートしていません。
-
-rオプションに指定したファイルの最終アクセス日時,最終修正日時がUTC(協定世界時)の1970年1月1日0時0分〜2038年1月19日3時14分の範囲外の場合,ファイルに設定される最終アクセス日時,最終修正日時の値は保証されません。
-
Windowsの場合,実際にファイルに設定される最終修正日時の精度はファイルシステムの仕様に依存します。例えば,FATファイルシステム上のファイルへの最終アクセス日時,最終修正日時は次のように設定されます。
-
指定できる日時の範囲は,コマンド実行時のタイムゾーンに関係なく1980年1月1日0時0分0秒〜2038年1月19日3時14分7秒です。
-
ファイルの最終アクセス日時の時分秒(hhmm.ss)は設定されません。
-
ファイルの最終修正日時に指定した秒(ss)は2秒単位に繰り上げられて設定されます。
-
使用例
-
ファイルを新規に作成します。
$ touch file001
この場合,作成されたファイルの最終アクセス日時と最終修正日時は,コマンドを実行した日時となります。また,ファイルサイズは0で作成されます。
-
存在するファイルの最終アクセス日時と最終修正日時を-tオプションで指定した日時(2012年5月12日3時49分5秒)に変更します。
$ touch -t 1205120349.05 file001
コマンドを実行すると,ファイルの最終アクセス日時と最終修正日時は-tオプションで指定した日時となります。
-
存在するファイルの最終アクセス日時だけを-tオプションで指定した日時(2013年11月01日 15時08分0秒)に変更します。
$ touch -a -t 201311011508 file001
コマンドを実行すると,ファイルの最終アクセス日時は-tオプションで指定した日時になります。ファイルの最終修正日時はコマンド実行前のままです。
-
存在するファイルの最終修正日時だけをMMDDhhmm[YY]形式の設定日時で指定した日時(2013年9月29日23時00分0秒)に変更します。
$ touch -m 0929230013 file001
コマンドを実行すると,ファイルの最終修正日時はMMDDhhmm[YY]形式の設定日時で指定した日時になります。ファイルの最終アクセス日時はコマンド実行前のままです。
-
複数のファイルに対して,ファイルの最終アクセス日時と最終修正日時を-tオプションで指定した日時へ変更します。-cオプションを指定することで,存在しないファイルは作成しないこととします。次の例では,存在しないファイルはfile002です。
$ touch -c -t 201311011508 file001 file002 file003 $ ls -lT * -rw-r--r-- 1 usr1 grp1 5 Nov 1 15:08:00 2013 file001 -rw-r--r-- 1 usr1 rrp1 9 Nov 1 15:08:00 2013 file003