touch は空のファイルを作るコマンドです。既にあるファイルに打つと更新日時だけが変わります。2つの顔の使い分けを、ブラウザ上のターミナルでそのまま打ちながら確認できます。
最終更新: 2026-09-04
touch [オプション] ファイル名...
名前を空白で区切って並べると、まとめて作れます。
このページのターミナルには README.md と logs/ があります。
$ ls
logs/ README.md
$ touch NOTES.md
$ ls
logs/ NOTES.md README.md
NOTES.md が空のファイルとして作られました。
touch は成功しても何も表示しません。
touch は、相手が存在するかどうかで役割が変わります。
| 相手 | 何が起きるか |
|---|---|
| 存在しないファイル | 空のファイルを作る |
| 既にあるファイル | 更新日時を今にする。中身はそのまま |
$ touch README.md
README.md は既にあるので、新しく作られるのではなく更新日時だけが変わります。
中身は消えません。ここが > README.md との決定的な違いです。
| オプション | 意味 |
|---|---|
-c | ファイルが無くても作らない。更新日時を変えるだけに徹する |
$ touch -c MISSING.md
$ ls
logs/ NOTES.md README.md
MISSING.md は作られていません。
| 場面 | 打つもの |
|---|---|
| 空のファイルを用意する | touch .gitkeep |
| 設定ファイルの置き場だけ先に作る | touch config.yml |
| ビルドをやり直させる | touch src/index.js(更新日時で判断する仕組みに効く) |
| 存在するときだけ日時を更新 | touch -c ファイル名 |
touch で更新日時を変えると、make のように「更新日時を見て作り直すか決める」仕組みを動かせます。
中身を1文字も変えずにビルドをやり直させたいときの定番です。
中身は消えません。
既にあるファイルに touch を打っても、消えるのは何もありません。
中身を空にしたいときは > ファイル名 を使います。この2つを取り違えると、消したくないものを消します。
親ディレクトリが無いと作れません。
$ touch a/b.txt
touch: cannot touch 'a/b.txt': No such file or directory
a が存在しないためです。先に mkdir -p a を打ってください。
ディレクトリは作れません。
touch が作るのはファイルだけです。ディレクトリは mkdir を使います。
ターミナル入門
基本コマンドを学ぶ
