支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


今回はディレクトリやファイルを操作するために覚えておきたいコマンドを紹介します。

cpコマンド

cpコマンドはファイルやディレクトリをコピーする際に使用するコマンドです。


書式:cp [オプション] コピー元ファイル名 コピー先ファイル名
書式:cp [オプション] コピー元ファイル名 コピー先ディレクトリ
複数のファイルをコピーしたい場合などは、コピー元ファイル名の部分を増やすことで1コマンドで複数のコピーを実行できます。もし、ファイル名が似たようなファイルをコピーしたいとなったときはワイルドカードを使ったコピーをオススメします。

書式:cp [オプション] コピー元ファイル名1 コピー元ファイル名2 コピー先ディレクトリ

↓頭文字「file」で始まるファイル名をコピーしたい時
書式:cp [オプション] file* コピー先ディレクトリ

cpオプション

cpコマンド 説明
-f コピー先に同名のファイルがあれば上書きする
-i コピー先に同名のファイルがあれば上書きするかどうか確認する
-r,-R ディレクトリ内を再帰的にコピーする
-d シンボリックリンクをシンボリックリンクとしてコピーする
-b バックアップファイルを同時に作成する
-s シンボリックリンクを作成する
-l ハードリンクを作成する

使用例

紹介したオプションの一部の動作を実際にみていきます。 前提として別ディレクトリへのコピーを目指します。階層図は以下のようになります。 また、省略はしていますがmemoryの階層から全て操作しています。


$ ls
cp
memory

$ find
./cp
./memory
./momory/dir1
./momory/dir1/file.txt
./momory/dir1/file.txt2
./momory/memory.txt
memoryディレクトリの中身をそれぞれのオプションを交えつつcpディレクトリにコピーしていきます。

-fオプション

-fオプションはコピー先に同名のファイルがあれば上書きをします。由来は-forceからきています。


$ cp -f memory.txt ../cp  ←memory.txtファイルを別階層にあるcpディレクトリに上書きコピー
$ ls ../cp   ←lsコマンドにてcpディレクトリ内部を確認
memory.txt
同一ファイルがあれば問答無用で上書き保存してしまいます。

-iオプション

-iオプションはコピー先に同名ファイルがあったときに確認するオプションです。由来は-interactiveからきています。-fオプションにてmemory.txtをコピーしたのでこれに続けて-iオプションでもコピーをしていきましょう。


$ vi memory.txt   ←上書きしたか判別がつくようにmemory.txtにaを入力しています

$ cp -i memory.txt ../cp
cp:  '../cp/memory.txt'を上書きします?yes(yes/noで回答)  ←正確にはyes/noの文字は出ません。今回はyesで回答します。
$ cat ../cp/memory.txt      ←ちゃんとコピーされているかmemory.txtの中身を確認します。
a

-r.-Rオプション

-rオプションはディレクトリ内を再帰的にコピーします。由来は-recursiveからきています。 ディレクトリdir1をcpディレクトリへコピーします。


$ cp -r dir1 ../cp         ←cpディレクトリにdir1ディレクトリをコピー
$ cd ../cp
$ find
.
./dir1                      ←ディレクトリの中身ごとコピーされてることが分かります
./dir1/file.txt    ←ファイルその1
./dir1/file2.txt    ←ファイルその2

-bオプション

-bオプションはコピー先に同名ファイルがあるときに上書きと同時にバックアップファイルを作成できるオプションです。由来は-backupからきています。


$ ls ../cp
memory.txt     ←cpディレクトリにmemory.txtが入っている状態
$ cp -b memory.txt ../cp     ←cpディレクトリにmemory.txtを上書き+バックアップファイル作成
$ ls ../cp
memory.txt
memory.txt~                    ←バックアップファイル

-dオプション

-dオプションはシンボリックリンクをシンボリックリンクとしてコピーします。由来は--no-dereferenceからきています。


$ ln -s symbol link   ←シンボリックリンクを作成
$ ls -l                               ←シンボリックリンクか確かめるにはls -lコマンドが必要
~
lrwxrwxrwx. 1 *** *** 6 10月 1  13:00 link -> symbol   ← ->となっていれば正しくシンボリックリンクを作成できています
~
$ cp -d link ../cp   ←シンボリックリンクの状態を保持したままcpディレクトリへのコピー
$ ls -l ../cp      ←シンボリックリンクとしてコピーできたか確認
~
lrwxrwxrwx. 1 *** *** 6 10月 1  13:02 link -> symbol           ← ->の状態になっているのでシンボリックリンクは維持されています
~

-lオプション

-lオプションはハードリンクを作成します。由来は-linkからきています。


$ touch hard   ←hardファイル作成
$ ln hard link   ←hardファイルとlinkファイルをハードリンク作成
$ ls -il    ←ハードリンクはiノードで判別
~
86664747 -rw-rw-r--. 2 ~略~ hard   ←iノードが2なのでハードリンク化
86664747 -rw-rw-r--. 2 ~略~ link
~
$ cp -l link ../cp/hard2     ←linkをコピーしてhard2の名前でcpディレクトリにハードリンク作成
$ ls -il ../cp
86664747 -rw-rw-r--. 3 ~略~ hard2    ←iノードが3なのでハードリンク化成功