cp はファイルをコピーするコマンドです。名前を変えてのコピー、ディレクトリへのコピー、-r でディレクトリごと複製する方法と、黙って上書きされる落とし穴を、ブラウザ上のターミナルで打ちながら確認できます。
最終更新: 2026-09-05
cp [オプション] コピー元 コピー先
コピー元はそのまま残り、コピー先に複製ができます。 コピー先がディレクトリなら、その中に同じ名前で入ります。
このページのターミナルには、いくつかのファイルと backup/ があります。
$ ls
backup/ config.json README.md src/
まず、名前を変えてコピーしてみます。
$ cp config.json config.backup.json
cp は成功したとき何も表示しません。
増えたかどうかは ls で確かめます。
$ ls
backup/ config.backup.json config.json README.md src/
コピー先にディレクトリを指定すると、その中に同じ名前で入ります。
$ cp README.md backup/
$ ls backup
config.json README.md
ディレクトリをそのまま渡すと、cp は断ります。
$ cp src backup
cp: -r not specified; omitting directory 'src'
中身をたどって複製する、という別の作業になるためです。
-r を付けると、中のファイルごと複製します。
$ cp -r src backup
$ ls backup
config.json README.md src/
$ ls backup/src
index.js utils.js
cp は、壊す前に戻せる状態を作るために打つことがいちばん多いコマンドです。
| 場面 | 打ち方 |
|---|---|
| 設定を書き換える前に控えを取る | cp config.json config.json.bak |
| サンプルから自分用の設定を作る | cp .env.example .env |
| ディレクトリごと複製して試す | cp -r project project-test |
| 変更日時も保ったまま複製する | cp -p config.json backup/ |
同名のファイルは黙って上書きされます。
cp は確認しません。
消えて困るものがある場所へコピーするときは -i を付けると、上書きの前に聞いてきます。
$ cp -i config.json backup/config.json
コピー先がディレクトリかどうかで結果が変わります。
cp a.txt backup は、backup がディレクトリなら中へコピー、無ければ backup という名前のファイルになります。
末尾に / を付けて backup/ と書いておくと、ディレクトリのつもりだったことが自分にも分かります。
元のファイルは消えません。
移動したいだけなら mv です。
cp のあとに元を消す手順を踏むと、消し忘れや消し間違いが起きます。
webterm.appこのサイト
ターミナル基礎
よく使うコマンドを学ぶ
learn.webterm.app別のサイト
