touchコマンドの詳細解説
`touch`コマンドは、
Unix系オペレーティングシステムにおいて、ファイルの最終アクセス時刻や最終変更時刻を操作するための標準的なユーティリティです。また、指定されたファイルが存在しない場合には、空のファイルを新規作成する機能も備えています。
歴史
`touch`コマンドは、Version 7 AT&T UNIXで初めて登場しました。現在、
GNU Core Utilitiesの一部として提供されている`touch`コマンドは、ポール・ルビン、アーノルド・ロビンズ、ジム・キングドン、デビッド・マッケンジー、スニル・シャーマらによって開発されました。
仕様
Single UNIX Specification (SUS) では、`touch`コマンドはファイルの最終アクセス時刻、最終変更時刻、またはその両方を変更するものと定義されています。変更対象のファイルは、引数としてパス名で指定されます。指定されたファイルが存在しない場合、`touch`コマンドは新しいファイルを生成し、アクセス時刻と変更時刻を指定された時刻に設定します。時刻が指定されない場合は、現在時刻が適用されます。
使用法
SUSで定義されている`touch`コマンドの主なオプションは以下の通りです。
`-a`: 最終アクセス時刻のみを変更します。
`-c`: ファイルが存在しない場合に新規作成せず、エラーも報告しません。
`-m`: 最終変更時刻のみを変更します。
`-r file`: 指定したファイル (`file`) の最終アクセス時刻と最終変更時刻を、変更対象のファイルに適用します。
`-t time`: 指定した時刻 (`time`) を最終アクセス時刻と最終変更時刻として設定します。時刻のフォーマットは `[[cc]yy]MMDDhhmm[.ss]` です。ここで、`MM` は月 (2桁)、`DD` は日 (2桁)、`hh` は時間 (2桁)、`mm` は分 (2桁) を表し、オプションの `ss` は秒 (2桁) を表します。`cc` は西暦の上2桁、`yy` は西暦の下2桁を表します。
時刻を指定しない場合、最終アクセス時刻と最終変更時刻には現在の時刻が適用されます。この機能は、ファイルの内容を変更せずにタイムスタンプのみを更新する場合に便利です。
GNU版の`touch`コマンドでは、`-d` オプションを使用すると、より柔軟なフォーマットで時刻を指定できます。例えば、`YYYY-MM-DD hh:mm:ss` や `Month DD YYYY hh:mm:ss` などの形式が利用可能です。
使用例
以下に、`touch`コマンドの具体的な使用例をいくつか示します。
1.
ファイルタイムスタンプの更新:
bash
touch myfile.txt
このコマンドは、`myfile.txt` の内容を変更せずに、タイムスタンプを現在時刻に更新します。
2.
makeコマンドとの連携:
ソフトウェア開発では、`make`コマンドを使ってプログラムをビルドする際に、`Makefile` やソースコードファイルの変更を検知して自動的に再ビルドが行われます。しかし、ソースコードが変更されていないのに `make` が何も実行しない場合、`touch`コマンドでソースコードファイルのタイムスタンプを更新することで、再ビルドを強制的に実行できます。
bash
touch project.c
make
3.
特定の日時を設定:
bash
touch -t 200701310846.26 index.html
touch -d '2007-01-31 08:46:26' index.html
touch -d 'Jan 31 2007 08:46:26' index.html
これらのコマンドは、`index.html` のタイムスタンプを2007年1月31日午前8時46分26秒に設定します。3つの例はすべて同等の結果になります。
4.
サブディレクトリへの適用:
`touch`コマンド自体には、サブディレクトリを再帰的に処理するオプションはありません。しかし、`find`コマンドと組み合わせることで、サブディレクトリ内の全てのファイルのタイムスタンプを更新できます。
bash
find . -exec touch {} \;
この方法はやや遅いため、`xargs`コマンドを利用するとより高速に処理できます。
bash
find . | xargs touch
ファイル名やディレクトリ名に空白が含まれる場合は、以下の様に`find`コマンドに`-print0`オプションを指定し、`xargs`コマンドに`-0`オプションを指定します。
bash
find . -print0 | xargs -0 touch
他のオペレーティングシステム
`touch`コマンドと同様の機能を持つユーティリティは、
Microsoft WindowsやmacOSなどの他のオペレーティングシステムにも存在します。これらのコマンドは、ファイルタイムスタンプの操作や新規ファイル作成など、同様の目的で使用されます。
関連項目
システム時刻
外部リンク
Single Unix Specificationで指定されるtouchの仕様(英語)
ntouch/dtouchのページ(英語)
touchの使い方を示す例(英語)
マニュアル
touch — GNU coreutilsのマニュアル(英語)
touch — OpenBSDのマニュアル(英語)
Manpage of TOUCH JM Project
touch(1) man page(SunOS リファレンスマニュアル)
touch(1) man page(HP-UX リファレンス)