▼すべてを開く。
▲すべてを閉じる。
$ ls -l -rw-rw-r-- 1 masa users 256 5月 16 18:04 file1
$ 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 file1 file1 'file1'と'file1'は同じファイルです。
ファイル名が同じであるので、コピーできない。しかし、UNIXではファイル名の大文字と小文字は区別されるので、次のコマンドは有効である。
$ cp file1 File1
$ 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
$ cp -p file1 file2
$ 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」にコピーされる。
通常のコピーでは、コピーされたファイルの所有者・グループ・アクセス権・アクセス時刻は、コピー時のものに変更され、コピー元とは異なるものになる。
これらの情報が異なることで不都合が生じる場合には、このオプションを利用してコピーを実行する。$ 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 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
$ 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 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 symbolicfile dir1
cpコマンドでシンボリックリンクファイル「symbolicfile」とディレクトリ「dir1」を指示すると、リンク先のファイル「myfile1」の内容が「symbolicfile」という名前でディレクトリ「dir1」にコピーされる。
lsコマンドでコマンド実行結果を確認する$ ls -l dir1 -rw-rw-r-- 1 masa users 529 6月 3 16:27 symbolicfile
$ 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 file1 dir1
cpコマンドで、コピー元ファイル「file1」とコピー先のディレクトリ「dir1」を指示すると、ディレクトリ「dir1」にファイル「file1」がコピーされる。
コピー先をディレクトリだけにすると、コピー元ファイルと同じ名前でコピーされる。
$ 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 -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
$ 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 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 file1 dir2/file1.bak cp: cannot create regular file `./dir2/file1.bak': そのようなファイルやディレクトリはありません
ディレクトリがないという警告が出てコピーが実行されない。既に存在するディレクトリを指定するか、事前にディレクトリを作成しておかなければならない。
$ 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 *.* 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
$ 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 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
$ cp -i file1 file2 cp: `file2' を上書きしてもよろしいですか(yes/no)?
cpコマンドで-iオプションを指定してコピー元ファイル「file1」とコピー先ファイル「file2」を指示すると、コピー先のファイル名として指定した「file2」が既に存在する場合、それに上書きしてもよいかを尋ねてくる。ここで「y」と入力すると上書きが実行され、「n」と入力するとコピーコマンドは実行されずに終了する。
$ ls IMG0006.JPG IMG0012.JPG IMG0017.JPG IMG0171.JPG IMG0280.JPG IMG0009.JPG IMG0015.JPG IMG0134.JPG IMG0263.JPG IMG0294.JPG
$ 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つのファイルが該当する。
$ ls IMG0029.jpg IMG0083.jpg IMG0142.jpg IMG0175.jpg IMG0211.jpg IMG0029.tiff IMG0083.tiff IMG0142.tif IMG0175.tif IMG0211.tif
$ cp *.ti* ../backup
cpコマンドでファイルを「*.ti*」、ディレクトリを「../backup」と指定すると、拡張子が「.tif」と「.tiff」のファイルがディレクトリ「../backup」にコピーされる。
ファイルを「*.tif*」と指定しても同様の結果が得られる。
$ 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」だけにマッチする。
$ ls IMG0029.jpg IMG0083.jpg IMG0142.jpg IMG0175.jpg IMG0211.jpg IMG0029.tiff IMG0083.tiff IMG0142.tif IMG0175.tif IMG0211.tif
$ 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」を持つすべてのファイルを意味する。
$ 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 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 file1 file2 file3 cp: 複数ファイルのコピーですが、最後の引数 `file3' がディレクトリではありません 詳しくは `cp --help' を実行して下さい.
コマンドの最後の引数がディレクトリであるべきところをファイルを指定したのでエラーになる。