コピー

記事の内容

概要

cpコマンドは、ファイルやディレクトリをコピーするために使います。

cpコマンドの説明図
cp
ディレクトリ階層

dir
└─ sample.txt

【dirディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ ls
sample.txt

[tomoji@10moji-blog.com dir]$ cp sample.txt new_sample.txt

[tomoji@10moji-blog.com dir]$ ls
sample.txt new_sample.txt

【ファイル削除後】

ディレクトリ階層

dir
├─ sample.txt
└─ new_sample.txt

オプション一覧

オプション説明
-rディレクトリを再帰的にコピー
-iコピー先に存在確認
-vコピーの詳細表示
-uソースとターゲットのファイルを比較し、ソースがターゲットより新しい場合のみコピーします。
-lハードリンク作成
-sシンボリックリンク作成
-pファイル属性 (所有者、パーミッションなど) 保存
-Pシンボリックリンクをコピー元と同じものにする
–parentsコピー先にディレクトリを作成

-r

-rオプションは、ディレクトリとその中身を再帰的にコピーすることができます。

cp -r
ディレクトリ階層

home
└─ user1
  ├─ sample1.txt
  └─ dir
    ├─ sample1.txt
    └─ sample2.txt

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ cp -r user1 user2

【コピー後】

ディレクトリ階層

home
├─ user1
│ ├─ sample1.txt
│ └─ dir
│   ├─ sample1.txt
│   └─ sample2.txt
└─ user2
  ├─ sample1.txt
  └─ dir
    ├─ sample1.txt
    └─ sample2.txt

-i

-iオプションは、コピー先に同名のファイルが存在する場合に上書きするかどうかを確認するためのオプションです。

cp -i
ディレクトリ階層

home
├─ dir1
│ └─ sample.txt
└─ dir2
  └─ sample.txt

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ cp -i dir1/sample.txt dir2/
overwrite dir/sample1.txt? Y

-v

-vオプションは、コピー操作が実行されるたびに、コピー元とコピー先の情報が表示されます。

cp -v
ディレクトリ階層

home
├─ dir1
│ └─ sample.txt
└─ dir2

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ cp -v dir1/sample.txt dir2/
dir1/sample.txt -> dir2/sample.txt

【コピー後】

ディレクトリ階層

home
├─ dir1
│ └─ sample.txt
└─ dir2
  └─ sample.txt

-u

-uオプションは、新しいファイルのみをコピーし、古いファイルはスキップします。

cp -u
ディレクトリ階層

dir
├─ sample1.txt
├─ sample2.txt
└─ sample3.txt

【dirディレクトリにいる場合】

[tomoji@10moji-blog.com dir]$ ls -l
-rw-r--r-- 1 tomoji tomoji 0 Jan 2 00:02 sample1.txt
-rw-r--r-- 1 tomoji tomoji 0 Jan 2 00:01 sample2.txt
-rw-r--r-- 1 tomoji tomoji 0 Jan 2 00:03 sample3.txt

[tomoji@10moji-blog.com dir]$ cp -u sample1.txt sample2.txt

[tomoji@10moji-blog.com dir]$ cp -u sample1.txt sample3.txt

[tomoji@10moji-blog.com dir]$ ls -l
-rw-r--r-- 1 tomoji tomoji 0 Jan 2 00:02 sample1.txt
-rw-r--r-- 1 tomoji tomoji 0 Jan 2 00:02 sample2.txt
-rw-r--r-- 1 tomoji tomoji 0 Jan 2 00:03 sample3.txt

【コピー後】

ディレクトリ階層

dir
├─ sample1.txt
├─ sample2.txt【古いデータのみ更新】
└─ sample3.txt

-l

-lオプションは、ファイルをコピーする際にハードリンクを作成するためのオプションです。

cp -l
ディレクトリ階層

dir
└─ sample1.txt
===============
【sample1.txtに中身】
このテキストはサンプルテキスト1になります。

【dirディレクトリにいる場合】

[tomoji@10moji-blog.com dir]$ cat dir/sample1.txt
このテキストはサンプルテキスト1になります。

[tomoji@10moji-blog.com dir]$ cp -l dir/sample1.txt dir/sample2.txt

[tomoji@10moji-blog.com dir]$ cat dir/sample2.txt
このテキストはサンプルテキスト1になります。

[tomoji@10moji-blog.com dir]$ vi dir/sample1.txt

【sample1.txtの内容を変更】

このテキストは変更された内容です。
[tomoji@10moji-blog.com dir]$ cat dir/sample1.txt
このテキストは変更された内容です。

[tomoji@10moji-blog.com dir]$ cat dir/sample2.txt
このテキストは変更された内容です。

【コピー後】

ディレクトリ階層

dir
├─ sample1.txt
└─ sample2.txt

-s

-sオプションは、ファイルをコピーする際にシンボリックリンクを作成するためのオプションです。

cp -s
ディレクトリ階層

dir
└─ sample1.txt
===============
【sample.txtに中身】
これはテキスト1の内容です。

【dirディレクトリにいる場合】

[tomoji@10moji-blog.com dir]$ ll
-rw-r--r-- 1 tomoji tomoji 0 Jan 2 00:01 sample1.txt

[tomoji@10moji-blog.com dir]$ cat sample1.txt
これはテキスト1の内容です。

[tomoji@10moji-blog.com dir]$ cp -s sample1.txt sample2.txt

[tomoji@10moji-blog.com dir]$ ll
-rw-r--r-- 1 tomoji tomoji 0 Jan 2 00:01 sample1.txt
lrwxr-xr-x 1 tomoji tomoji 0 Jan 2 00:02 sample2.txt -> sample1.txt

[tomoji@10moji-blog.com dir]$ cat sample2.txt
これはテキスト1の内容です。

【sample1.txt内容を変更】

これはテキスト1の内容です。
内容を変更します。

【dirディレクトリにいる場合】

[tomoji@10moji-blog.com dir]$ cat sample1.txt
これはテキスト1の内容です。
内容を変更します。

[tomoji@10moji-blog.com dir]$ cat sample2.txt
これはテキスト1の内容です。
内容を変更します。

【コピー後】

ディレクトリ階層

dir
├─ sample1.txt
└─ sample2.txt【sample1.txtを参照】

-p

-pオプションは、コピーする際にファイルの属性を保持するためのオプションです。

cp -p
ディレクトリ階層

dir
∟sample1.txt

【dirディレクトリにいる場合】

[tomoji@10moji-blog.com dir]$ ll
-rw-r--r-- 1 tomoji tomoji 0 Jan 2 00:01 sample1.txt

[tomoji@10moji-blog.com dir]$ cp sample1.txt sample2.txt

[tomoji@10moji-blog.com dir]$ ll
-rw-r--r-- 1 tomoji tomoji 0 Jan 2 00:01 sample1.txt
-rw-r--r-- 1 tomoji tomoji 0 Jan 2 00:02 sample2.txt

[tomoji@10moji-blog.com dir]$ chmod 777 sample1.txt

[tomoji@10moji-blog.com dir]$ ll
-rwxrwxrwx 1 tomoji tomoji 0 Jan 2 00:02 sample1.txt
-rw-r--r-- 1 tomoji tomoji 0 Jan 2 00:01 sample2.txt

[tomoji@10moji-blog.com dir]$ cp -p sample1.txt sample3.txt

[tomoji@10moji-blog.com dir]$ ll
-rwxrwxrwx 1 tomoji tomoji 0 Jan 2 00:02 sample1.txt
-rw-r--r-- 1 tomoji tomoji 0 Jan 2 00:01 sample2.txt
-rwxrwxrwx 1 tomoji tomoji 0 Jan 2 00:02 sample3.txt

【コピー後】

ディレクトリ階層

dir
├─ sample1.txt
├─ sample2.txt
└─ sample2.txt【権限も含めコピーされる】

–parents

–parentsは、コピーする際に親ディレクトリも含めコピーするオプションです。

cp –parents
ディレクトリ階層

home
├─ dir1
│   └─ sample1.txt
└─ dir2

【homeディレクトリにいる場合】

[tomoji@10moji-blog.com home]$ cp --parents dir1/sample1.txt dir2/

【コピー後】

ディレクトリ階層

home
├─ dir1
│   └─ sample1.txt
└─ dir2
  └─ dir1【ディレクトリも含めコピー】
    └─ sample1.txt

記事の内容
閉じる