記事最終更新日:2017年08月20日
記事投稿日:2016年10月10日
閲覧数:5952 views
cpコマンドの使い方メモ -【Unix&Linux&Mac】

はじめに
今回のD.M.C.【デベメモドットコム】の記事は「cpコマンドの使い方」ということで、LinuxやMacなどUnix系列のOSで使用されるcpコマンドについて、使い方や各種オプションなどの組み合わせを詳しくメモ(解説)していきます。
はじめに「cpコマンド」で何ができるのかというと、簡単に言うとファイル・ディレクトリ(フォルダ)をコピーするコマンドです。
cpコマンドも基本的な使い方から様々なオプションの組み合わせがあるので紹介していきたいと思います。
基本的な使い方
ではまずは基本的な使い方をみていきます。
まずは下記のコードを見てみてください。
$ cp before.txt after.txt
最初の「before.txt」がコピー元のファイルになっていて、「after.txt」がコピー先のファイルになっています。
そして複数ファイルをコピーする際は下記コードになっています。
$ cp before01.txt before02.txt before03.txt after_dir/
これは「before01.txt」と「before02.txt」と「before03.txt」はコピー元のファイルになっていて、「after_dir/」がコピー先になっています。コピー先にディレクトリ(フォルダ)を指定してファイル名を省略した場合はファイル名はそのままの状態でコピーされディレクトリに入るようになっています。
これが基本的な使い方になっています。
「-r」オプションでディレクトリごとコピー
cpコマンドに「-r」オプションをつけて実行するとファイル単位のコピーではなく、ディレクトリ(フォルダ)単位でのコピーをする事ができます。
実際に「-r」をつけたコマンドが下記コードになっています。
$ cp -r before_dir after_dir
ディレクトリ(フォルダ)単位のコピーなので、もともとディレクトリ(フォルダ)内に入っていたファイルも一緒にコピーされているのがわかると思います。
「-r」オプションはよく使用するオプションなので覚えておくといいと思います。
「-f」オプションで強制上書き
では続いて「-f」オプションを説明していきます。
「-f」つけて実行すると、今いるカレントディレクトリ内の中に同じファイル名のが存在する場合は強制的に上書きコピーをする事ができます。
「-f」オプションをつけたコマンドが下記コードになっています。
$ cp -f same-name.txt same-name.txt
「-f」オプションをつけて実行してから、上書きするか聞かれてしまう場合はcpの前に「\」を付け加えてコマンドを実行します。
$ \cp -f same-name.txt same-name.txt
「-i」オプションで上書きになるときは確認
「-i」オプションをつけて実行するとコピー先に同じファイル名のものがあった場合は上書きするかどうかを確認することができます。「-f」オプションは強制的に上書きしますが、「-i」は確認をしてから実行ができるので安心だと思います。
「-i」オプションをつけたコマンドが下記コードになっています。
$ cp -i before.txt after_dir/before.txt
cp: overwrite `after_dir/before.txt`?
実行結果を見ると、「cp: overwrite」上書きするかどうか尋ねられるので「y」または「n」を入力してENTERを押します。
「y」はyes、「n」はnoという意味で、下記コードは「y」を指定したコードになっています。
$ cp -i before.txt after_dir/before.txt
cp: overwrite `after_dir/before.txt`? y
「-p」オプションでオーナー・グループ・権限を保持したままコピー
「-p」オプションをつけて実行すると何ができるかというと、コピー元のオーナーやグループ、そして権限をそのまま維持したままコピー先にコピーする事ができます。
実際に「-p」オプションをつけたコマンドが下記のコードになっています。
$ cp -p before.txt after.txt
「ls」コマンドに「-l」オプションをつけて確認してみます。(lsコマンドについては、過去に詳しく記事を書いているのでよければこちらの記事を参照してみてください。)
$ ls -l
total 0
-rw-r--r-- 1 dmc dmc 0 2 11 16:32 after.txt
-rw-r--r-- 1 dmc dmc 0 2 11 16:32 before.txt
実行結果を見ると情報を維持したままコピーされているのがわかると思います。
「–parents」オプションで構造も含めてコピー
「–parents」オプションをつけて実行すると構造を維持したままコピーする事ができる。
まず初めに「pwd」コマンドを使用して今いるカレントディレクトリの場所を把握していて、次に「–l」オプションをつけた「ls」コマンドでカレントディレクトリ内のファイルまたはディレクトリ(フォルダ)を確認しています。そして「–parents」オプションをつけて「cp」コマンドを実行しています。下記コードを見てみてください。
$ pwd
/var/www/before_dir/
$ ls -l
total 4
-rw-r--r--. 1 root root 0 Oct 9 14:29 before.txt
drwxr-xr-x. 3 dmc dmc 4096 Oct 10 06:49 after_dir
$ cp --parents /var/www/before_dir/before.txt after_dir/
$ ls -l after_dir/
total 4
drwxr-xr-x. 3 root root 4096 Oct 10 07:06 var
結果を確認する為に再度「ls」コマンドを実行して結果を確認してみてください。「after_dir」ディレクトリ(フォルダ)の中身を見てみるとコピーしたファイルの根元の「var」ディレクトリ(フォルダ)から構造を維持してコピーされているのがわかると思います。
cpコマンドのオプション一覧
cpコマンドのオプションのまとめ一覧
-r | ディレクトリごとコピー |
---|---|
-f | 同ファイル名がある時は強制コピー |
-i | 同ファイル名がある時は確認メッセージ表示 |
-p | 権限・オーナー・グループを保持したままコピー |
–parents | 構造も含めてコピー |
感想
今回紹介した「cp」コマンドも使用頻度が高い基本コマンドなので、しっかりオプションも覚えたいですね。
今回紹介したコマンド以外にも色々と当サイト(D.M.C.)で紹介していけたらと思います。
About / ブログについて

D.M.C.【デベメモドットコム】はWEB制作に関することを中心に、
その他、関連する事まで出来るだけわかりやすく備忘録としてメモを残していくブログです。
このブログを通して少しでも為になる情報を発信して皆さんと共有できればとても嬉しいです。