りなっくすとらずぱい!

Raspberry Pi初心者に向けた各コマンドの説明、プログラムの作り方について紹介しています!

cp - ファイルやディレクトリを複製(コピー)する

f:id:ibuquicallig:20190913012840p:plain

この記事ではRaspberry Piでのcpコマンドの基本的な使い方と例、オプションなどについて解説しています。

この記事でできること

  • cpコマンドを使用して任意のファイル・ディレクトリをコピーできるようになる。
  • ファイル上書きとなる前に警告を表示するようにエイリアスを設定・解除できるようになる。

cpコマンド

cpコマンドでは指定したファイルディレクトリをコピーすることができます。cpcopyの略でどのLinuxでも最初から入っている基本コマンドの一つとなっています。

ファイルをコピーする

まずは基本的なコマンドからです。以下の形式でコマンドを実行します。

$ cp [コピー元のファイル名] [コピー先のファイル名]

例えばmeeting.txtmeeting_copy.txtという名前でコピーしたときは、

$ cp meeting.txt meeting_copy.txt

と実行します。Windowsのように勝手にコピーと名前に追加して作成することがないので、毎回自分でコピー先のファイル名を指定してあげる必要があります。

ディレクトリを何も書かないままだと現在の作業ディレクトリにコピーされますが、コピー先のディレクトリを指定することもできます。先ほどのmeeting.txtを現在いるディレクトリ内のbackupというディレクトリにコピーしたいときは以下のどちらかでもいいので実行します。

$ cp meeting.txt meeting/
$ cp meeting.txt meeting/meeting.txt

コピー先に指定した名前がディレクトリの場合、そのディレクトリ内に同じファイル名でコピーを作成します。もちろんこの時にファイル名を指定してコピーを作成することもできます。

一つ注意が必要なのは、コピー先に同じファイル名のファイルが存在している場合、確認なしに上書きしてしまいます。

基本的なファイルのコピーの仕方については以上のような感じです。

-rオプションでディレクトリごとコピーする

-rオプションを指定することでディレクトリとその中身を丸ごとコピーすることができます。rmコマンドでも同じようなオプションが存在していましたが、Linuxではディレクトリとディレクトリ内全部という意味で-r-Rオプションがよく使われます。

例として、以下のコマンドでtestディレクトリとその中身をtest_copyというディレクトリ名でコピーします。

$ mkdir test && touch test/meeting.txt test/image.png  # ファイルの作成
$ ls -R     # ファイルの確認
./test:
image.png  meeting.txt

$ cp test test_copy

$ ls -R
./test:
image.png  meeting.txt

./test_copy:
image.png  meeting.txt  # ディレクトリごとコピーされた!

-sオプションでシンボリックリンクを作成する

-sオプションを使用することでファイルをコピーするのではなくシンボリックリンクを作成します。シンボリックリンクとはWindowsでのショートカットのようなもので実際のファイルへのリンクのみを作成し、あたかもそこにファイルがあるかのように操作することができます。

$ ls
dir test

$ cd dir
$ cp ../test ./test_link
$ ls -l
test_link -> ../test

ちゃんとリンクのファイル形式になっていますね。シンボリックリンクを削除するにはrmコマンドでもOKですが専用のunlinkというコマンドも用意されています。

-iオプションで上書き前に警告する

-iオプションを使用することでコピー先に同名のファイルが存在している場合に警告を表示してくれます。rmコマンドにも同様に削除前に警告を表示する-iオプションがありましたね!

$ ls
dir test

$ cd dir
$ cp ../test ./test   # 同名のファイルが存在していないので警告は表示されない
$ cp ../test ./test
cp: overwrite './test'? yes

$ ls
test

上書きになってしまうファイルが存在していないときは普通のオプションなしのコマンドと同じように動きます。

overwrite ?と聞かれているときにyyesと入力してエンターキーを押すと上書きします。何も入力しなかったりnnoと入力すると上書きされません。

実行時に確認を毎回挟むように設定する

上で紹介した-iオプションをcpコマンド実行時に必ず追加するようにします。いちいち打つのがめんどくさかったですが、こうすることでWindowsのように削除時に上書き前に確認を挟んでくれます。

コマンドのショートカットのようなもの(エイリアス)を作成するために、ホームディレクトリにある.bashrcというファイルを修正します。

以下の記事でもエイリアスについて解説しています。興味があったらこの記事の後に読んでみてください!

まずはホームディレクトリに移動して.bashrcファイルをエディタで開きます。vimを使っていきますがnanoemacsでも大丈夫です。Raspberry Piの場合(Raspbianの場合)最初からvimは使用可能です。

$ cd            # ホームディレクトリに移動
$ vim .bashrc

開いたファイルの末尾にcpcp -iにするエイリアスを作成します。vimの場合Shift + Gでファイルの末尾に移動することができます。

移動できたらiで編集モードに入り、以下の内容を追記します。

alias cp='cp -i'

追記できたらEscで入力モードから抜け、!wqで保存・Vimの終了をします。

.bashrcファイルの変更は次回ログイン以降、もしくは. .bashrcを実行することで有効となります。

このエイリアスを削除するには追記した行を消して、再度ログインすることで無効となります。

参考

以下のサイトの情報を引用・参考にしました。