「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コマンドのよく使われるオプションを紹介します。
- -a
- 元ファイルのファイルモードや所有者といった属性ができるだけコピーされます。また、「-R」と同じように再帰的にディレクトリをコピーします。シンボリックリンクはシンボリックリンクとしてコピーされます。
- -R
- ディレクトリごとコピーします。配下のサブディレクトリもたどって構造ごとコピーされます(これは「ディレクトリを再帰的にコピー」と表現されます)。
- -p
- 元ファイルのファイルモード、所有者、タイムスタンプも、コピー先のファイルにコピーします。
- -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'
更新履歴
2018-07-17 Ubuntu 18.04 LTSで動作を確認
2017-10-27 Ubuntu 17.10で動作を確認
コメント