Linux / コマンド / touch / 空のファイル作成と最終更新日時の変更

Linuxでは、touch はファイルが存在しない場合に空のファイルを作成し、ファイルが存在する場合は、デフォルトでアクセスおよび更新時間を現在時刻に更新します。既存ファイルの内容は消去されませんが、時間情報に依存するバックアップやビルド操作に影響を与えることがあります。

空のファイルを作成する

次のコマンドは、example.txt が存在しない場合に、現在のディレクトリに空のファイルを作成します。以降の例は、GNU coreutils の touch および stat に基づいています。既存のデータに影響を与えないように、別の空の練習用ディレクトリで実行してください。

touch example.txt
ls -l example.txt

サイズ0のファイルが一覧に表示されます。同じ名前のファイルがすでに存在する場合、新しい空のファイルで上書きするのではなく、既存のファイルの時間を更新します。名前にスペースが含まれている場合は、touch "my notes.txt" のように引用符で囲んでください。スペースで区切られた複数の名前がリストされている場合は、それぞれが処理されます。

既存のファイルの時間の確認と更新

ファイルのアクセス時間(atime)は最後にアクセスした時間に関係し、修正時間(mtime)はファイル内容の最後の変更に関係します。デフォルトでは、touch example.txtは両方の時間を現在の時間に設定します。変更前後を次のように確認できます。

stat example.txt
touch example.txt
stat example.txt

statの出力でAccessとModifyのエントリを比較します。実際の出力言語や表示形式は環境によって異なる場合があり、非常に短い間隔での差はファイルシステムの時間解像度により見えない場合があります。

ステータス変更時刻(ctime)は、パーミッションなどのメタデータの変更に関連しており、作成時刻とは同じではありません。touchで時刻情報を変更することもctimeを更新する場合がありますが、ctimeを任意の値に設定したり、作成時刻を変更することはできません。アクセス時刻が読み取りごとに更新されるかどうかも、ファイルシステムやマウント設定によって影響されます。それぞれの時刻の意味は、GNUファイル時刻の説明で確認できます。

アクセス時刻または修正時刻だけを変更する

-aはアクセス時刻のみを選択し、-mは修正時刻のみを選択します。以下は、練習用ファイルの修正時刻を現在の時刻に変更し、結果を確認する例です。

touch -m example.txt
stat example.txt

-a はアクセス時間を選択し、-m は修正時間を選択します。これは、ファイルのステータス変更時間が保持されることを意味するものではありません。ファイルが存在しない場合は、別のオプションが指定されない限り、空のファイルが作成されます。

希望する時間または別のファイルから時間を使用する

GNU touch -d を使用して日付と時刻を指定できます。以下の例では、練習用ファイルのアクセス時間と修正時間を指定した時間に設定しています。

touch -d '2024-01-15 10:30:00' example.txt
stat example.txt

タイムゾーンが別途指定されていない場合、環境変数TZまたはシステムのタイムゾーンに基づいて解釈されます。出力されるアクセス時間および修正時間が指定された値と一致することを確認してください。保存される値は、ファイルシステムのサポート範囲および解像度によって異なる場合があります。

別のファイルを参照として使用するには、-rを使用します。次に、現在のディレクトリにreference.txtおよびexample.txtの両方が存在する場合の例を示します。

touch -r reference.txt example.txt
stat reference.txt example.txt

対象ファイルのアクセス時間および修正時間を、参照ファイルの値に設定します。参照ファイルが存在しない場合、エラーが発生し、デフォルトでは対象が存在しない場合に空のファイルが作成されることがあります。詳細なオプションについては、GNU touchマニュアルを参照してください。

ファイルを作成せずに時間のみを更新する

-c は、指定されたファイルが存在しない場合、新しいファイルを作成しません。以下のコマンドは、ファイルが既に存在する場合に時間を現在の時刻に更新し、存在しない場合は作成しません。

touch -c example.txt

ファイルが存在しない場合でもエラーなく終了することがあるため、このコマンドの成功ステータスだけでファイルの存在を確認しないでください。新しいファイルを作成するには親ディレクトリに書き込み権限が必要で、既存のファイルの時間を変更する権限は所有者および設定したい時間によります。エラーが発生した場合は、パスと権限を確認してください。