本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、「touch」コマンドです。
本連載では、Linuxの基本的なコマンドについて、基本的な書式からオプション、具体的な実行例までを分かりやすく紹介していきます。今回は、ファイルのタイムスタンプを変更する「touch」コマンドです。
「touch」は、ファイルの最終更新日を変更するコマンドです。「touch ファイル名」でtouchコマンドを実行した時間がファイルの最終更新日となります。指定したファイルがない場合は、サイズが「0」のファイルが作成されます。
touchコマンドの主なオプションは次の通りです。
短いオプション | 長いオプション | 意味 |
---|---|---|
-t スタンプ | 「[[CC]YY]MMDDhhmm[.ss]」形式で指定した日時に変更する(実行例2を参照) | |
-d | --date=日付文字列 | 文字列で指定した日時に変更する(実行例2を参照) |
-r | --reference=ファイル名 | 指定したファイルのタイムスタンプと同じ日時にする |
-a | 最終アクセス日時のみ変更する(指定しない場合は、最終更新日時と最終アクセス日時が変更される) | |
-m | 最終更新日時のみ変更する(指定しない場合は、最終更新日時と最終アクセス日時が変更される) | |
--time=指定 | 指定した種類の時刻を変更する。指定が「access」「atime」「use」ならばアクセス日時(「-a」相当)、「modify」「mtime」の場合は更新日時のみ変更する(「-m」相当) | |
-c | --no-create | ファイルを作成しない |
-h | --no-dereference | シンボリックリンクの場合、リンク先ではなくシンボリックそのもののタイムスタンプを変更する(ファイルシステムが対応している場合のみ) |
「touch ファイル名」で、ファイルのタイムスタンプを現在の時刻に変更します。変更されるのは、ファイルの「最終更新日時」と「最終アクセス日時」です。“ファイルを開いて何もせず、そのまま上書き保存した”のと同じ動作になります。
touch ファイル1 ファイル2 ……
$ stat file1.txt (「file1.txt」のタイムスタンプを確認) File: `file1.txt' Size: 0 Blocks: 0 IO Block: 4096 通常の空ファイル Device: fd00h/64768d Inode: 22341828 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1000/ study) Gid: ( 1000/ study) Context: unconfined_u:object_r:user_home_t:s0 Access: 2016-05-25 20:46:30.361461729 +0900 Modify: 2016-05-25 20:46:21.726461729 +0900 Change: 2016-05-25 20:46:21.726461729 +0900 Birth: - $ touch file1.txt (「file1.txt」のタイムスタンプを現在の時刻に変更) $ stat file1.txt (「file1.txt」のタイムスタンプを確認) File: `file1.txt' Size: 0 Blocks: 0 IO Block: 4096 通常の空ファイル Device: fd00h/64768d Inode: 22341828 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1000/ study) Gid: ( 1000/ study) Context: unconfined_u:object_r:user_home_t:s0 Access: 2016-06-08 22:19:53.419158873 +0900 Modify: 2016-06-08 22:19:53.419158873 +0900 Change: 2016-06-08 22:19:53.419158873 +0900 Birth: -
タイムスタンプを指定した日時に変更したい場合は、「-t」オプションまたは「--date」オプションを使います。
「-t」オプションで指定するのは「[[CC]YY]MMDDhhmm[.ss]」という書式で、[]内は省略可能です。「MMDDhhmm」は「月・日・時・分」をそれぞれ2桁で表示するという意味で、月の前に2桁追加すると西暦の下2桁、という意味になります。
「--date=」オプションの場合は、日時を文字列で指定できます。日付だけ指定した場合は「00:00」に、時刻だけ指定した場合は「今日の日付」となります。
touch -t スタンプ ファイル1 ファイル2 ……
touch --date="2016/5/1 23:45" ファイル1 ファイル2 ……
$ touch -t 06010123 file1.txt (「file1.txt」のタイムスタンプを“6/1 01:23”に変更) $ stat file1.txt (「file1.txt」のタイムスタンプを確認) File: `file1.txt' Size: 0 Blocks: 0 IO Block: 4096 通常の空ファイル Device: fd00h/64768d Inode: 22341828 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1000/ study) Gid: ( 1000/ study) Context: unconfined_u:object_r:user_home_t:s0 Access: 2016-06-01 01:23:00.000000000 +0900 Modify: 2016-06-01 01:23:00.000000000 +0900 Change: 2016-06-08 22:20:48.949910372 +0900 Birth: - $ touch --date="2016/5/1 23:45" file1.txt (「file1.tx」tのタイムスタンプを“2016/5/1 23:45”に変更) $ stat file1.txt (「file1.txt」のタイムスタンプを確認) File: `file1.txt' Size: 0 Blocks: 0 IO Block: 4096 通常の空ファイル Device: fd00h/64768d Inode: 22341828 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1000/ study) Gid: ( 1000/ study) Context: unconfined_u:object_r:user_home_t:s0 Access: 2016-05-01 23:45:00.000000000 +0900 Modify: 2016-05-01 23:45:00.000000000 +0900 Change: 2016-06-08 22:24:19.267016373 +0900 Birth: -
touchコマンドで指定したファイルが存在しなかった場合は、空のファイルが作成されます。テスト用のファイルを作成したり、ログを出力したりするなどで「とにかく最初にファイルが存在していないと困る」という場合に便利です。もし、ファイルが存在してもタイムスタンプが変更されるだけなので、ファイルが消えてしまうことはありません。
逆に“常に空のファイルを作成したい”という場合は、例えば「cp /dev/null file1.txt」のように指定します。「file1.txt」がない場合も空のファイルで上書き作成されます。
touchコマンドでファイルを作成したくない場合は、「-c」オプションを使います。
$ ls file1.txt (「file1.txt」だけが存在する) $ touch file2.txt $ ls file1.txt file2.txt (「file2.txt」が作成された) $ touch -c file3.txt $ ls file1.txt file2.txt (「-c」オプション付きで実行したので、「file3.txt」は作成されていない)
PC-9801N/PC-386MからのDOSユーザー。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。のち退社し、専業ライターとして活動を開始。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『はじめてでもわかるSQLとデータ設計』『シェルの基本テクニック』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。
Copyright © ITmedia, Inc. All Rights Reserved.