すべてを

▼開く

閉じる▲

1つのファイルをコピーする

○ファイル「file1」をコピーして「file1.bak」を作成する。

lsコマンドでコピーするファイルを見る
$ ls -l
-rw-rw-r--    1 masa     users         256  5月 16 18:04 file1

cpコマンドでコピー元ファイルとコピー先ファイルを指定する
$ cp file1 file1.bak

cpコマンドでコピー元ファイル「file1」とコピー先のファイル名「file1.bak」を指定すると、「file1」が「file1.bak」にコピーされる。コピー先ファイル名として指定した「file1.bak」と同じ名前のファイルがすでに存在した場合、「file1.bak」は「file1」で上書きされる。このとき、何の警告もない。

lsコマンドでコマンド実行結果を確認する
$ ls -l
-rw-rw-r--    1 masa     users         256  5月 16 18:04 file1
-rw-r--r--    1 masa     users         256  5月 23 21:06 file1.bak

コピー先の「file1.bak」の日時は、コピーを実行したときの日時に変更される。

コピー先のファイルの所有者、グループ、アクセス権、アクセス時刻は、コピー時のものに変更される。

●同じディレクトリ内に同じファイル名でコピーすることはできない。

cpコマンドでコピー元ファイルとコピー先ファイルを指定する
$ cp file1 file1

'file1'と'file1'は同じファイルです。

ファイル名が同じであるので、コピーできない。しかし、UNIXではファイル名の大文字と小文字は区別されるので、次のコマンドは有効である。

$ cp file1 File1

lsコマンドでコマンド実行結果を確認する
$ ls -l
-rw-r--r--    1 masa     users         256  5月 24 12:12 File1
-rw-rw-r--    1 masa     users         256  5月 16 18:04 file1

コピー元ファイルの属性を保存してコピーする

○ファイル「file1」のファイル情報を保持して「file2」を作成する

cpコマンドで-pオプション、コピー元ファイルとコピー先ファイルを指定する
$ cp -p file1 file2

lsコマンドでコマンド実行結果を確認する
$ ls -l
-rw-rw-r--    1 masa users           0  5月  6 16:45 file1
-rw-rw-r--    1 masa users           0  5月  6 16:45 file2

cpコマンドで-pオプションを指定して、コピー元ファイル「file1」とコピーファイル「file2」を指示すると、コピー元ファイル「file1」の所有者・グループ・アクセス権・アクセス時刻などの情報が保持されたまま「file2」にコピーされる。

通常のコピーでは、コピーされたファイルの所有者・グループ・アクセス権・アクセス時刻は、コピー時のものに変更され、コピー元とは異なるものになる。

これらの情報が異なることで不都合が生じる場合には、このオプションを利用してコピーを実行する。

シンボリックリンクの元ファイルをコピーする

○シンボリックリンクファイル「symboliclinkfile」を「myfile4」にコピーする

lsコマンドでコピーするファイルを見る
$ ls -l
-rw-rw-r--    1 masa users         529  6月  3 16:21 myfile1
lrwxrwxrwx    1 masa users           7  6月  3 17:08 symboliclinkfile -> myfile1

cpコマンドで-Lオプション、コピー元ファイルとコピー先ファイルを指定する
$ cp -L symboliclinkfile myfile4

cpコマンドで-Lオプションを指定し、ファイル「symboliclinkfile」と「myfile4」を指示すると、シンボリックリンク元のファイルを「myfile4」にコピーする。

lsコマンドでコマンド実行結果を確認する
$ ls -l
-rw-rw-r--    1 masa users         529  6月  3 16:21 myfile1
-rw-rw-r--    1 masa users         529  6月  3 17:19 myfile4
lrwxrwxrwx    1 masa users           7  6月  3 17:08 symboliclinkfile -> myfile1

シンボリックリンクを保持してコピーする

○シンボリックリンクファイル「symbolicfile」をディレクトリ「dir1」にコピーする

lsコマンドでコピーするファイルを見る
$ ls -l
drwxrwxr-x    2 masa users        4096  6月  3 16:14 dir1
-rw-rw-r--    1 masa users         529  5月  6 16:45 myfile1
lrwxrwxrwx    1 masa users           7  6月  3 15:10 symbolicfile -> myfile1

cpコマンドで-dオプション、コピー元ファイルとコピー先ディレクトリを指定する
$ cp -d symbolicfile dir1/

cpコマンドで-dオプションを指定し、シンボリックリンクファイル「symbolicfile」とディレクトリ「dir1」を指示すると、シンボリックリンクが保持されて「symbolicfile」がコピーされる。

lsコマンドでコマンド実行結果を確認する
$ ls -l dir1
lrwxrwxrwx    1 masa users           7  6月  3 16:24 symbolicfile -> myfile1

●シンボリックリンクをコピーした場合

-dオプションを指定しないでシンボリックリンクをコピーした場合は、シンボリックリンクがリンクするファイル自体(この例では「myfile1」)がコピーされる。

lsコマンドでコピーするファイルを見る
$ ls -l
drwxrwxr-x    2 masa users        4096  6月  3 16:27 dir1
-rw-rw-r--    1 masa users         529  6月  3 16:21 myfile1
lrwxrwxrwx    1 masa users           7  6月  3 16:22 symbolicfile -> myfile1

cpコマンドでコピー元ファイルとコピー先ディレクトリを指定する
$ cp symbolicfile dir1

cpコマンドでシンボリックリンクファイル「symbolicfile」とディレクトリ「dir1」を指示すると、リンク先のファイル「myfile1」の内容が「symbolicfile」という名前でディレクトリ「dir1」にコピーされる。

lsコマンドでコマンド実行結果を確認する
$ ls -l dir1
-rw-rw-r--    1 masa users         529  6月  3 16:27 symbolicfile

ファイルを指定した場所にコピーする

○ファイル「file1」をディレクトリ「dir1」にコピーする。

lsコマンドでコピーするファイルを見る
$ ls -l
drwxr-xr-x    2 masa     users        4096  5月 22 21:54 dir1
-rw-rw-r--    1 masa     users         256  5月 16 18:04 file1

cpコマンドでコピー元ファイルとコピー先のディレクトリを指定する
$ cp file1 dir1

cpコマンドで、コピー元ファイル「file1」とコピー先のディレクトリ「dir1」を指示すると、ディレクトリ「dir1」にファイル「file1」がコピーされる。
コピー先をディレクトリだけにすると、コピー元ファイルと同じ名前でコピーされる。

lsコマンドでコマンド実行結果を確認する
$ ls -lR
.:
drwxr-xr-x    2 masa     users        4096  5月 22 21:54 dir1
-rw-rw-r--    1 masa     users         256  5月 16 18:04 file1
./dir1:
-rw-r--r--    1 masa     users         256  5月 23 21:41 file1

●コピー先のディレクトリが存在しない場合、

コピー先のディレクトリ「dir2」が存在しない場合はコピーできない。

cpコマンドでコピー元ファイルとコピー先のディレクトリを指定する
$ cp file1 dir2/
cp: cannot create regular file `dir2/file1': そのようなファイルやディレクトリはありません

ディレクトリの指定「/」を忘れて、単に「dir2」とした場合は、「dir2」がファイル名としてコピーされる。

cpコマンドでコピー元ファイルとコピー先のディレクトリを指定する
$ cp file1 dir2

lsコマンドでコマンド実行結果を確認する
$ ls -l
-rw-r--r--    1 masa     users         256  5月 24 12:13 dir2
-rw-rw-r--    1 masa     users         256  5月 16 18:04 file1

ファイルを指定した場所に別名でコピーする

○「file1」をディレクトリ「dir1」に「file1.bak」という名前でコピーする。

lsコマンドでコピーするファイルを見る
$ ls -l
drwxr-xr-x    2 masa     users        4096  5月 22 21:54 dir1
-rw-rw-r--    1 masa     users         256  5月 16 18:04 file1

cpコマンドでコピー元ファイルとコピー先ファイルを指定する
$ cp file1 dir1/file1.bak

cpコマンドで、コピー元ファイル「file1」とコピー先のディレクトリ「dir1」とファイル名「file1.bak」を指示すると、ディレクトリ「dir1」にファイル「file1」が「file1.bak」という名前でコピーされる。コピー先に指定するディレクトリは、既に存在するものでなくてはならない。

lsコマンドでコマンド実行結果を確認する
$ ls -lR
.:
drwxr-xr-x    2 masa     users        4096  5月 22 21:54 dir1
-rw-rw-r--    1 masa     users         256  5月 16 18:04 file1
./dir1:
-rw-r--r--    1 masa     users         200  5月 23 17:02 file1.bak

●コピー先のディレクトリが存在しない場合

cpコマンドでコピー元ファイルとコピー先ファイルを指定する
$ cp file1 dir2/file1.bak
cp: cannot create regular file `./dir2/file1.bak': そのようなファイルやディレクトリはありません

ディレクトリがないという警告が出てコピーが実行されない。既に存在するディレクトリを指定するか、事前にディレクトリを作成しておかなければならない。

ワイルドカードを使って複数ファイルを一度にコピーする

○複数のファイルをワイルドカードを使って一度にコピーする

lsコマンドでコピーするファイルを見る
$ ls -l
drwxr-xr-x  2 masa users     4096  8月  6 01:17 Desktop
drwxr-xr-x  2 masa users     4096  8月  7 01:38 dir1
-rw-r--r--  1 masa project_x    0  8月 10 22:33 file1
-rw-r--r--  2 masa users      882  8月 18 18:42 file1.txt
-rw-r--r--  1 masa users      256  8月  6 01:34 file2.txt
-rw-r--r--  2 masa users      882  8月 18 18:42 hlinkfile.txt
lrwxrwxrwx  1 masa users        9  8月  6 01:37 slinkfile.txt -> file2.txt

cpコマンドでワイルドカード指定とコピー先ディレクトリを指定する
$ cp *.* dirx

cpコマンドで、ファイルを「*.*」ディレクトリを「dirx」と指示すると、カレントディレクトリにあるファイル(「ファイル名.拡張子」という形式を持つファイル)すべてを「dirx」にコピーする。この場合、「ファイル名」「.ファイル名」「ディレクトリ」はコピーされない。

lsコマンドでコマンド実行結果を確認する
$ ls -la dirx
drwxr-xr-x   2 masa users 4096  9月  8 17:15 .
drwx------  22 masa users 4096  9月  8 17:15 ..
-rw-r--r--   1 masa users  882  9月  8 17:16 file1.txt
-rw-r--r--   1 masa users  256  9月  8 17:16 file2.txt
-rw-r--r--   1 masa users  882  9月  8 17:16 hlinkfile.txt
-rw-r--r--   1 masa users  256  9月  8 17:16 slinkfile.txt

更新日時が古いファイルはコピーしない

○ファイル「file1」を「file1.bak」にコピーする

lsコマンドでコピーするファイルを見る
$ ls -l
-rw-rw-r--    1 masa     users         256  5月 16 18:04 file1
-rw-r--r--    1 masa     users         256  5月 24 12:55 file1.bak

cpコマンドで-uオプション、コピー元ファイルとコピー先ファイルを指定する
$ cp -u file1 file1.bak

cpコマンドで-uオプションを指定し、コピーするファイル「file1」と「file1.bak」を指示すると、タイムスタンプの古い「file1」は「dir1」の中の新しい「file1.bak」にコピーされない。

lsコマンドでコマンド実行結果を確認する
$ ls -l
-rw-rw-r--    1 masa     users         256  5月 16 18:04 file1
-rw-r--r--    1 masa     users         256  5月 24 12:55 file1.bak

上書きの可否を問い合わせてコピーする

○上書きをチェックしてファイル「file1」を「file2」にコピーする

cpコマンドで-iオプション、コピー元ファイルとコピー先ファイルを指定する
$ cp -i file1 file2
cp: `file2' を上書きしてもよろしいですか(yes/no)?

cpコマンドで-iオプションを指定してコピー元ファイル「file1」とコピー先ファイル「file2」を指示すると、コピー先のファイル名として指定した「file2」が既に存在する場合、それに上書きしてもよいかを尋ねてくる。ここで「y」と入力すると上書きが実行され、「n」と入力するとコピーコマンドは実行されずに終了する。

特定のファイル名を持つファイルをすべてコピーする

○ワイルドカード「?」を使って番号が200番台のファイルをコピーする

lsコマンドでディレクトリの内容を見る
$ ls
IMG0006.JPG  IMG0012.JPG  IMG0017.JPG  IMG0171.JPG  IMG0280.JPG
IMG0009.JPG  IMG0015.JPG  IMG0134.JPG  IMG0263.JPG  IMG0294.JPG

cpコマンドでコピーするファイルとコピー先ディレクトリを指定する
$ cp IMG02??.JPG ../backup

cpコマンドで、コピーするファイルを「IMG02??.JPG」移動先のディレクトリを「../backup」と指定すると、200番台のファイルがディレクトリ「../backup」にコピーされる。

lsコマンドで実行結果を確認する
$ ls ../backup
IMG0263.JPG  IMG0280.JPG  IMG0294.JPG

ワイルドカードの「?」は、任意の1文字を意味するので、「IMG02??.JPG」は「IMG02」の後の「??」の場所に任意の文字が2文字あるファイルを意味する。であるから、「IMG0200.JPG」のように数字が入ってもよいし「IMG02AB.JPG」のようにアルファベットが入ってもよい。このディレクトリにあるファイルでは、「IMG0263.JPG」「IMG0280.JPG」「IMG0294.JPG」の3つのファイルが該当する。

特定の拡張子(複数)を持つファイルをすべてコピーする

○ワイルドカード「*」を使って拡張子が「.tif」と「.tiff」のファイルをコピーする

lsコマンドでコピーするファイルを見る
$ ls
IMG0029.jpg   IMG0083.jpg   IMG0142.jpg  IMG0175.jpg  IMG0211.jpg
IMG0029.tiff  IMG0083.tiff  IMG0142.tif  IMG0175.tif  IMG0211.tif

cpコマンドでコピーするファイルとコピー先ディレクトリを指定する
$ cp *.ti* ../backup

cpコマンドでファイルを「*.ti*」、ディレクトリを「../backup」と指定すると、拡張子が「.tif」と「.tiff」のファイルがディレクトリ「../backup」にコピーされる。
ファイルを「*.tif*」と指定しても同様の結果が得られる。

lsコマンドで実行結果を確認する
$ ls ../backup
IMG0029.tiff  IMG0083.tiff  IMG0142.tif  IMG0175.tif  IMG0211.tif

ワイルドカードの「*」は、0文字以上の任意の文字を意味するため、1文字目の「*」はすべてのファイル名を指定し、後の「.ti*」は拡張子の「.ti」以降にどのような文字がきてもよいことを意味する。「*」の場合は0文字以上なので、「.ti」以降が0文字の「.ti」にも5文字の「.tiffany」にもマッチする。しかし、このディレクトリには拡張子が「.jpg」と「.tif」と「.tiff」しかないので、「.tif」と「.tiff」だけにマッチする。

特定の拡張子を持つファイルをすべてコピーする

○ワイルドカード「*」を使って拡張子が「.jpg」のファイルをコピーする

lsコマンドでコピーするファイルを見る
$ ls
IMG0029.jpg   IMG0083.jpg   IMG0142.jpg  IMG0175.jpg  IMG0211.jpg
IMG0029.tiff  IMG0083.tiff  IMG0142.tif  IMG0175.tif  IMG0211.tif

cpコマンドでコピーするファイルとコピー先ディレクトリを指定する
$ cp *.jpg ../backup

cpコマンドでコピーするファイルを「*.jpg」、コピー先のディレクトリを「../backup」と指定すると、拡張子が「jpg」のファイルがすべてディレクトリ「../backup」にコピーされる。

lsコマンドで実行結果を確認する
$ ls ../backup
IMG0029.jpg   IMG0083.jpg   IMG0142.jpg  IMG0175.jpg  IMG0211.jpg

アスタリスク「*」は、0文字以上の任意の文字列を意味するメタキャラクタで、ワイルドカードと呼ばれる。シェルがこれを解釈してコマンドを実行する。

最初の「*」は、ファイル名の本体がどのような名前でもよいことを意味し、「.jpg」は拡張子を「jpg」に特定している。つまり、「ファイル名.拡張子」型のファイルで拡張子に「jpg」を持つすべてのファイルを意味する。

複数のファイルを一度にコピーする

○ファイル「file1」と「file2」をディレクトリ「dir1」にコピーする。

lsコマンドでコピーするファイルとディレクトリを見る
$ ls -l
drwxr-xr-x    2 masa     users        4096  5月 24 15:16 dir1
-rw-rw-r--    1 masa     users         256  5月 16 18:04 file1
-rw-r--r--    1 masa     users         256  5月 24 15:15 file2

cpコマンドでコピー元ファイルとコピー先ディレクトリを指定する
$ cp file1 file2 dir1

cpコマンドで、ファイル「file1」と「file2」、ディレクトリ「dir1」を指示すると、2つのファイルがディレクトリにコピーされる。

lsコマンドでコマンド実行結果を確認する
$ ls -lR
.:
drwxr-xr-x    2 masa     users        4096  5月 24 15:18 dir1
-rw-rw-r--    1 masa     users         256  5月 16 18:04 file1
-rw-r--r--    1 masa     users         256  5月 24 13:35 file2

./dir1:
-rw-r--r--    1 masa     users         256  5月 24 15:18 file1
-rw-r--r--    1 masa     users         256  5月 24 15:18 file2

●ディレクトリの指定を忘れた場合

cpコマンドでコピーするするファイルを3つ指定する
$ cp file1 file2 file3
cp: 複数ファイルのコピーですが、最後の引数 `file3' がディレクトリではありません
詳しくは `cp --help' を実行して下さい.

コマンドの最後の引数がディレクトリであるべきところをファイルを指定したのでエラーになる。