【 cp 】 ファイルをコピーする 【 Linuxコマンドまとめ 】

「Linuxコマンドまとめ」カテゴリでは、Linuxのコマンドについて、基本的な実行例とオプションを分かりやすくまとめます。

cp」はファイルをコピー(複製)するコマンドです。

ファイルのコピーが必要な時に使う、基本的なコマンドの1つです。

cpコマンドの基本的な使い方

cpコマンドの基本書式は、以下の通りです。

cp [オプション] コピー元 コピー先

まずは、オプションを用いない基本的な使い方を見ていきましょう。

別の名前でコピー

たとえば、次のように実行します。

cp test.txt test_copy.txt

これで、「text.txt」と同じ内容のファイルが「text_copy.txt」という別の名前で複製されました。

別のディレクトリに同じ名前でコピー

ファイルを別のディレクトリにコピーする場合、ファイル名を省略することができます。以下は、「test.txt」を「test_dir」ディレクトリにコピーする例です。

cp test.txt test_dir

以下の画像では、「test_dir」ディレクトリを作成して、上記のコマンドでコピーし、「test_dir」に「text.txt」がコピーされていることを「ls」コマンドで確認しています。

このように、ディレクトリ名だけ書くと、そのディレクトリに同じ名前でコピーされます。

複数のファイルを指定したディレクトリにコピー

コピー元には複数のファイルを指定することができます。複数のファイルを指定した場合、コピー先はディレクトリでなければいけません。

cp test_a.txt test_b.txt test_dir

パス名の展開を利用してコピー

シェルによるパス名の展開を利用して複数のファイルを効率的にコピーすることもできます。

以下は、「mkdir」で「text」ディレクトリを作成し、拡張子が「.txt」のファイルすべてを「text」ディレクトリにコピーします。

mkdir text
cp *.txt text

より複雑な条件を指定してマッチングさせることもできます。シェルによるパス名の展開については、以下の記事を参照してください。

cpコマンドの基本的なオプション

cpコマンドのよく使われるオプションを紹介します。

-p
元ファイルのファイルモード、所有者、タイムスタンプも、コピー先のファイルにコピーします。
-r
ディレクトリごとコピーします。配下のサブディレクトリもたどって構造ごとコピーされます(これは「ディレクトリを再帰的にコピー」と表現されます)。
-a
元ファイルのファイルモードや所有者といった属性ができるだけコピーされます。また、「-r」と同じように再帰的にディレクトリをコピーします。シンボリックリンクはシンボリックリンクとしてコピーされます。
-u
コピー先ファイルが存在しないか、コピー元ファイルのほうが新しい場合のみコピーします。
-i
コピー先のファイルがすでに存在する場合、上書きする前に確認します。

圧倒的によく使われるのは「-a」オプションでしょう。とにかくファイルやディレクトリを「そっくりそのまま」コピーしたい場合に重宝するオプションです。

# file1の属性をできるだけfile2にコピーします。
# file1がシンボリックリンクならfile2もシンボリックリンクとなります。
cp -a file1 file2

# dir1をできるだけそのままdir2にコピーします。
cp -a dir1 dir2

cpコマンドのヘルプ

使用法: cp [OPTION]... [-T] SOURCE DEST
または: cp [OPTION]... SOURCE... DIRECTORYアーカイブモード。
または: cp [OPTION]... -t DIRECTORY SOURCE...
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

Mandatory arguments to long options are mandatory for short options too.
  -a, --archive                -dR --preserve=all と同様
      --attributes-only        ファイルのデータをコピーせず、ファイルの属性のみコピーする
      --backup[=CONTROL]       コピー先ファイルがパーミッション存在する時にバックアップを作成する
  -b                           --backup と同様だが引数を受け付けない
      --copy-contents          再帰時に特殊ファイルの内容をコピーする
  -d                           --no-dereference --preserve=links と同様
  -f, --force                  if an existing destination file cannot be
                                 opened, remove it and try again (this option
                                 is ignored when the -n option is also used)
  -i, --interactive            prompt before overwrite (overrides a previous -n
                                  option)
  -H                           follow command-line symbolic links in SOURCE
  -l, --link                   コピーの代わりにファイルのハードリンクを作成する
  -L, --dereference            SOURCE にあるシンボリックリンクを常にたどる
  -n, --no-clobber             存在するファイルを上書きしない (前に指定した
                                 -i オプションを上書きする)
  -P, --no-dereference         SOURCE にあるシンボリックリンクを決してたどらない
  -p                           --preserve=mode,ownership,timestamps と同様
      --preserve[=ATTR_LIST]   指定した属性を保護する (デフォルト: mode,ownership,
                                 timestamps)。追加可能な属性: context, links, 
                                 xattr, all
      --no-preserve=ATTR_LIST  指定した属性を保護しない
      --parents                DIRECTORY 配下で SOURCE ファイルのフルパス名を使用する
  -R, -r, --recursive          再帰的にディレクトリをコピーする
      --reflink[=WHEN]         clone/CoW コピーを制御する。下記を参照
      --remove-destination     コピー先にファイルが存在する場合、開く前に削除する
                                 (--force と対照的)
      --sparse=WHEN            スパースファイル作成を制御する。下記を参照
      --strip-trailing-slashes  各 SOURCE 引数から末尾のスラッシュを全て削除
                                 する
  -s, --symbolic-link          コピーの代わりにシンボリックリンクを作成する
  -S, --suffix=SUFFIX          通常のバックアップ接尾辞を上書きする
  -t, --target-directory=DIRECTORY  全ての SOURCE 引数を DIRECTORY にコピーする
  -T, --no-target-directory    DEST を通常ファイルとして扱う
  -u, --update                 SOURCE ファイルがコピー先ファイルより新しいか
                                 存在しない時だけコピーする
  -v, --verbose                実行していることを説明する
  -x, --one-file-system        このファイルシステムだけで実行する
  -Z                           set SELinux security context of destination
                                 file to default type
      --context[=CTX]          like -Z, or if CTX is specified then set the
                                 SELinux or SMACK security context to CTX
      --help     この使い方を表示して終了する
      --version  バージョン情報を表示して終了する

デフォルトでは、SOURCE スパースファイルは発見的手法で検出され、対応する
DEST ファイルはスパースファイルとして作成されます。これは --sparse=auto
が選択されたときの動作です。--sparse=always を指定した場合、SOURCE ファ
イルに値が 0 のバイトが十分な長さ含まれている場合には DEST がスパース
ファイルとして作成されます。スパースファイルの作成を禁止する場合は
--sparse=never を使用してください。

--reflink[=always] が指定された場合、軽量コピーが実行されデータブロック
が変更された場合にのみコピーされます。そうでない場合、コピーが失敗した
場合、または --reflink=auto が指定された場合、通常のコピーにフェイル
バックされます。

The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
The version control method may be selected via the --backup option or through
the VERSION_CONTROL environment variable.  Here are the values:

  none, off       バックアップを作成しない (--backup を付けた時でも)
  numbered, t     番号付きバックアップを作成する
  existing, nil   番号付きバックアップがあれば番号付き、
                      そうでなければ、simple で作成する
  simple, never   常に簡易バックアップを作成

特別な場合として、cp は -f と -b オプションが与えられ、SOURCE と DEST が
同一ファイルである時は、SOURCE のバックアップを作成します。

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
cp の翻訳に関するバグは <http://translationproject.org/team/ja.html> に連絡してください。
Full documentation at: <http://www.gnu.org/software/coreutils/cp>
or available locally via: info '(coreutils) cp invocation'

更新履歴

2017-10-27 Ubuntu 17.10で動作を確認