next up previous contents
Next: ファイルの移動,名前変更 mv Up: ファイル操作 Previous: ファイルの表示 cat (何が書いてあるのか)


ファイルのコピー cp

ファイルをコピーする命令です。
cp [-option] [コピー元file|directory] [コピー先file|directory]
という書式を持っています。 この命令も多くのオプションを持っています。

最後の引数がすでに存在するディレクトリならば、 cp はそのディレクトリに指定したファイルを同じ名前でコピーする。 しかし2つのファイルを指定した場合は、 最初のファイルを2つ目のファイルに上書きする。 2つ以上のファイルを指定したのに、 最後の引数がディレクトリでないとエラーとなる。 デフォルトではディレクトリのコピーはしない。

このcpの主要なオプションは,

-i コピー先に同じ名前があれば上書きうわがき (overwrite)するか どうか聞いてきます。yで上書きします。
-p コピーすると 普通はコピーした日付や所有者はコピーした人になりますが, このオプションを付けると 元のファイルの所有者やグループ,モード,日付もそのままコピーします。
-r ディレクトリのコピーをする時,その下のディレクトリもコピーします。 ファイルがシンボリックリンクの場合, リンクした本体のファイルやディレクトリをコピーします。
-a -r と同じ。ファイルがシンボリックリンクの場合, 元のファイルの校正とアトリビュートをなるべく保ったまま保存する。

この命令には引数の取り方によって3つの使い方があります。

  1. cp file1 file2

    cp file1 file2はもっとも単純な使用方法です。 ファイルfile1をファイルfile2という名前でコピーします。 もし,ファイルfile2があれば,上書きされます。

  2. cp file1 file2 ... direc/

    cp file1 file2 ... direc/は 複数のファイルfile1 file2を 同じ名前でdirec/の中にコピーします。

  3. cp -r direc1 direc2

    cp -r direc1 direc2は, ディレクトリdirec1direc2の中に作成して, direc1の中にあるファイル全部を direc1/direc2の中にコピーします。 しかし,この方法は, ディレクトリ内部にリンクしたファイルがないことが条件です。 リンクしたファイルはリンク情報を失い ファイルがそのままコピーされるので, tar([*])を使用するか, GNU のシステムを使っている Linux ならば cp -a を使用するのが効率的です。

もちろん,コピー先の場所はあなたが書き込むことのできる場所です。 そうでないときは, `Permission denied(許可しません)' と表示します。 上書きの場合は,元のファイルをいったん消して書き込みますので, 元のファイルもあなたが書き込み許可を持っていなければ同じように `許可しません'と冷たくあしらわれます。 ファイルモードふぁいるもーどを chmod([*])で変更してから行いましょう。

あなたが,学校と自宅とで同じ環境にしたい場合, 最初に,シンボリックリンクのある ディレクトリ全部をコピーする時には, tar を用いて次のようにコピーします。

% tar zcvf arcd.tar.gz ~/docs/Thesis

こうすると,~/docs/Thesisarcd.tar.gz にパックしますので, arcd.tar.gz を次のようにメディアに保存します。
% cp arcd.tar.gz /media/disk

この時,パックしたファイルにシンボリックリンクがあるかどうかもチェックし ます。

% find ~/docs/Thesis/ -type l -print
ここで,何か表示されればシンボリックリンクがありますので, このディレクトリもしくはファイルもパックします。
% tar zcvf arcd-link.tar.gz `find ~/docs/Thesis/ -type l -print`
% cp arcd-link.tar.gz /media/disk

このファイルを自宅で,展開します。

% tar zxvf arcd.tar.gz -C /
% tar zxvf arcd-link.tar.gz -C /


Kishimoto Ken
平成20年3月1日