LinuxやUnix系のシステムで頻繁に使用されるtouchコマンドは、ファイルのタイムスタンプを変更したり、新しい空ファイルを作成したりするための便利なコマンドです。本記事では、touchコマンドを使ってファイルのタイムスタンプを自在に操作する方法について、基本から応用まで丁寧に解説していきます。
touchコマンドの基本的な使い方
touch [ファイル名]上記のようにコマンドを実行すると、指定したファイルが存在しない場合は空のファイルが作成されます。一方、ファイルがすでに存在している場合には、そのファイルの「最終アクセス時刻(atime)」と「最終更新時刻(mtime)」が現在の日時に変更されます。これはログファイルの更新や、ファイルの更新状況を変更したい場合に役立ちます。
たとえば、以下のように使うと新しい空ファイルを作成できます。
touch newfile.txtこれはテキストエディタを開かずに一瞬でファイルを作成できるため、スクリプトのテストや設定ファイルのひな型作成などでも重宝します。
タイムスタンプを指定して変更する
touchコマンドは、ファイルのタイムスタンプを現在時刻ではなく、任意の日時に設定することもできます。これにより、開発環境やビルド環境における日時の調整や、ログ管理における並び替えの制御が可能になります。
-tオプションを使う方法
touch -t [[CC]YY]MMDDhhmm[.ss] ファイル名-tオプションで使用する[[CC]YY]MMDDhhmm[.ss]の形式は、日時を数値だけで指定するフォーマットです。それぞれの意味は以下のとおりです、
CC:世紀(例:20 は 2000年、19 は 1900年)※省略可能YY:年(00〜99)MM:月(01〜12)DD:日(01〜31)hh:時(00〜23)mm:分(00〜59).ss:秒(00〜59)※省略可能
つまり、202412251530.00 は「2024年12月25日15時30分00秒」を意味します。
この形式では、年月日時分秒を一続きの数値で指定します。
例:2024年12月25日 15時30分00秒に設定する場合:
touch -t 202412251530.00 sample.txtls -l --time-style=+'%Y/%m/%d %H:%M:%S'この方法はスクリプトから使う場合に適しており、正確な日時の操作が可能です。
-dオプションを使う方法(GNU touch)
touch -d "YYYY-MM-DD hh:mm:ss" ファイル名例:2024年12月25日 15時30分00秒に設定する場合:
touch -d "2024-12-25 15:30:00" sample.txtこのオプションでは、人間にとって読みやすい形式で日時を指定できます。特にシェルで対話的に使う場合や、ログ調整などで過去・未来の日時を柔軟に設定したいときに便利です。
ls -l --time-style=+'%Y/%m/%d %H:%M:%S'-tオプションと-dオプションの違い
-tと-dはどちらもtouchコマンドでタイムスタンプを指定するために使いますが、それぞれ特徴があります。
-tオプションは、機械的な日時指定が可能です。スクリプト内で正確なタイミングを指定したいときに向いています。-dオプションは、人間が読みやすい形式で日時を指定できます。日付や時間を自由なフォーマットで記述できるため、対話的な操作や柔軟な記述をしたいときに便利です。
| オプション | 読みやすさ | 利用に適した場面 |
|---|---|---|
-t | △ | スクリプト、自動処理 |
-d | ◎ | 対話的操作、可読性重視 |
例えば、スクリプト内で年月日時分秒を数値で指定するなら-t、人が直接入力して確認しながら操作するなら-dが適しています。
アクセス時刻と更新時刻を個別に設定する
ファイルには複数のタイムスタンプが存在します。主に「アクセス時刻(atime)」と「更新時刻(mtime)」の2つがあり、touchコマンドではこれらを個別に設定することも可能です。
アクセス時刻だけを変更(-a)
touch -a -t 202512251530.00 sample.txtls -ul --time-style=+'%Y/%m/%d %H:%M:%S'ls -l --time-style=+'%Y/%m/%d %H:%M:%S'このコマンドでは、アクセス時刻(atime)だけが変更され、更新時刻(mtime)はそのままになります。これはファイルの利用履歴を擬似的に変更したいときなどに使われます。
更新時刻だけを変更(-m)
touch -m -t 202512251530.00 sample.txtls -ul --time-style=+'%Y/%m/%d %H:%M:%S'ls -l --time-style=+'%Y/%m/%d %H:%M:%S'こちらは更新時刻(mtime)のみを変更し、アクセス時刻(atime)は変更しません。
他ファイルのタイムスタンプをコピーする
既存のファイルと同じタイムスタンプを別のファイルに適用したい場合は、-rオプションを使います。これは複数のファイルの更新日時を揃えるときや、ファイルの更新履歴を模倣したいときに便利です。
touch -r [参照ファイル] [対象ファイル]例:original.txtのタイムスタンプをcopy.txtへコピー
touch -r original.txt copy.txtこのコマンドを実行すると、copy.txtのアクセス時刻(atime)および更新時刻(mtime)がoriginal.txtと同じになります。
まとめ
touchコマンドは単なる空ファイル作成だけでなく、タイムスタンプの詳細な操作にも役立ちます。スクリプトでのログファイル処理や、テスト環境でのファイル管理など、様々な場面で役立ちます。正しく使いこなすことで、日々の作業効率が向上することが期待できます。ぜひ一度コマンドラインで試してみてください。
以上で本記事の解説を終わります。
よいITライフを!