前回、lsコマンドの使い方、覚えておくと便利なオプションについて紹介させてもらいました。
今回は、コピーコマンドについて紹介していきます。
コピーコマンドについても、Linuxで作業をおこなう上では必須のコマンドになります。
こちらもまた、使わない人はいないでしょう。
メジャーなオプションからマイナーなオプションまで、いろいろ説明していきます。
頻繁に使うコマンドなのであまり忘れることはないオプションが多いかもしれませんが、参考にしてください。
目次
同名ファイルが存在する場合はバックアップ作成(-b)
コピー先に同名ファイルが存在する場合、バックアップファイルを作成します。
「-b」オプションを使用します。
$ ls -la total 16 drwxr-xr-x 2 xxx yyy 4096 2020-01-29 01:31 . drwxr-xr-x 5 xxx yyy 4096 2019-07-28 23:49 .. -rw-r--r-- 1 xxx yyy 5 2020-01-29 01:31 dest.txt -rw-r--r-- 1 xxx yyy 4 2020-01-29 01:31 src.txt $ cp -b src.txt dest.txt $ ls -la total 20 drwxr-xr-x 2 xxx yyy 4096 2020-01-29 01:31 . drwxr-xr-x 5 xxx yyy 4096 2019-07-28 23:49 .. -rw-r--r-- 1 xxx yyy 4 2020-01-29 01:31 dest.txt -rw-r--r-- 1 xxx yyy 5 2020-01-29 01:31 dest.txt~ -rw-r--r-- 1 xxx yyy 4 2020-01-29 01:31 src.txt
上記コマンド結果のようになります。
コピー先に既に「dest.txt」というファイルが既に存在するので、コピー先に存在していた「dest.txt」をバックアップファイルとして退避しています。
強制上書き(-f)
OS自体の設定にもよりますが、ファイルをコピーすると上書きになる場合、「上書きします。よろしいですか?」のメッセージが表示されます。
「-f」オプション、または、「–force」オプションを使用すると、この上書き確認メッセージを表示しません。
$ ls -la total 12 drwxr-xr-x 2 xxx yyy 4096 2020-01-29 01:34 . drwxr-xr-x 5 xxx yyy 4096 2020-01-29 01:36 .. -rw-r--r-- 1 xxx yyy 0 2020-01-29 01:36 dest.txt -rw-r--r-- 1 xxx yyy 4 2020-01-29 01:34 src.txt $ cp -f src.txt dest.txt $ ls -la total 16 drwxr-xr-x 2 xxx yyy 4096 2020-01-29 01:34 . drwxr-xr-x 5 xxx yyy 4096 2020-01-29 01:36 .. -rw-r--r-- 1 xxx yyy 4 2020-01-29 01:43 dest.txt -rw-r--r-- 1 xxx yyy 4 2020-01-29 01:34 src.txt
上記コマンド結果のように、同じファイル名でコピーしたとしても、上書き確認メッセージは表示されません。
必ず上書き確認メッセージを表示(-i)
先ほどの強制上書きでも記載しましたが、「上書きします。よろしいですか?」のメッセージが表示されるかどうかは、OS自体の設定に依存します。
「-i」オプション、または、「–interactive」オプションを使用すると、上書き確認メッセージを必ず表示することができます。
$ ls -la total 12 drwxr-xr-x 2 xxx yyy 4096 2020-01-29 01:49 . drwxr-xr-x 5 xxx yyy 4096 2020-01-29 01:36 .. -rw-r--r-- 1 xxx yyy 4 2020-01-29 01:43 dest.txt -rw-r--r-- 1 xxx yyy 0 2020-01-29 01:49 src.txt $ cp -i dest.txt src.txt cp: overwrite `src.txt'? yes $ ls -la total 16 drwxr-xr-x 2 xxx yyy 4096 2020-01-29 01:49 . drwxr-xr-x 5 xxx yyy 4096 2020-01-29 01:36 .. -rw-r--r-- 1 xxx yyy 4 2020-01-29 01:43 dest.txt -rw-r--r-- 1 xxx yyy 4 2020-01-29 01:49 src.txt
上記コマンド結果のように、上書きコピー時に「 overwrite `src.txt’?」という確認メッセージを表示しています。
yesと入力すると、ファイルが上書き更新されます。
同名ファイルの場合は上書きしない(-n)
同名ファイルを上書きしたくない場合は、「-n」オプション、または、「–no-clobber」オプションを指定すると、上書きは行われません。
$ ls -la total 12 drwxr-xr-x 2 xxx yyy 4096 2020-01-29 02:08 . drwxr-xr-x 5 xxx yyy 4096 2020-01-29 01:36 .. -rw-r--r-- 1 xxx yyy 4 2020-01-29 01:43 dest.txt -rw-r--r-- 1 xxx yyy 0 2020-01-29 02:04 src.txt $ cp -n dest.txt src.txt $ ls -la total 12 drwxr-xr-x 2 xxx yyy 4096 2020-01-29 02:08 . drwxr-xr-x 5 xxx yyy 4096 2020-01-29 01:36 .. -rw-r--r-- 1 xxx yyy 4 2020-01-29 01:43 dest.txt -rw-r--r-- 1 xxx yyy 0 2020-01-29 02:04 src.txt
属性情報(タイムスタンプなど)をそのままにしてコピー(-p)
タイムスタンプ・グループ・所有者といった属性情報はそのままにしてコピーする場合は「-p」オプション、または、「–preserve」オプションを指定します。
$ ls -la total 16 drwxr-xr-x 2 xxx yyy 4096 2020-02-05 00:35 . drwxr-xr-x 5 xxx yyy 4096 2020-01-29 01:36 .. -rw-r--r-- 1 xxx yyy 4 2020-02-05 00:38 dest.txt -rw-r--r-- 1 xxx yyy 4 2020-01-29 01:43 src.txt $ cp -p src.txt dest.txt $ ls -la total 16 drwxr-xr-x 2 xxx yyy 4096 2020-02-05 00:35 . drwxr-xr-x 5 xxx yyy 4096 2020-01-29 01:36 .. -rw-r--r-- 1 xxx yyy 4 2020-01-29 01:43 dest.txt -rw-r--r-- 1 xxx yyy 4 2020-01-29 01:43 src.txt
フォルダをコピー/再帰的にコピー(-r)
フォルダをコピーする場合は「-r」オプションを指定します。
このオプションを指定すれば、フォルダの中身がそのまま表示されます。
フォルダをコピーというよりも、フォルダの中身を再帰的にコピーするという動きになります。
$ ls -la total 12 drwxr-xr-x 3 xxx yyy 4096 2020-02-05 00:49 . drwxr-xr-x 8 xxx yyy 4096 2019-09-10 01:01 .. drwxr-xr-x 2 xxx yyy 4096 2020-02-05 00:35 dir $ $ $ ls -la ./dir/ total 16 drwxr-xr-x 2 xxx yyy 4096 2020-02-05 00:35 . drwxr-xr-x 3 xxx yyy 4096 2020-02-05 00:49 .. -rw-r--r-- 1 xxx yyy 4 2020-02-05 00:40 dest.txt -rw-r--r-- 1 xxx yyy 4 2020-01-29 01:43 src.txt $ cp -r dir dir2 $ ls -la total 16 drwxr-xr-x 4 xxx yyy 4096 2020-02-05 00:50 . drwxr-xr-x 8 xxx yyy 4096 2019-09-10 01:01 .. drwxr-xr-x 2 xxx yyy 4096 2020-02-05 00:35 dir drwxr-xr-x 2 xxx yyy 4096 2020-02-05 00:50 dir2 $ ls -la ./dir2/ total 16 drwxr-xr-x 2 xxx yyy 4096 2020-02-05 00:50 . drwxr-xr-x 4 xxx yyy 4096 2020-02-05 00:50 .. -rw-r--r-- 1 xxx yyy 4 2020-02-05 00:50 dest.txt -rw-r--r-- 1 xxx yyy 4 2020-02-05 00:50 src.txt