Linuxでファイルやディレクトリをコピーしたい場合は「cp」コマンドを実施します。
「cp」コマンドの使い方(Linux)
cpコマンドはファイルやディレクトリをコピーする際に使用します。
以下では「testfile01.txt」というファイルのコピーを作成する例となります。
対象のファイルとディレクトリが表示されている事を確認します。
$ ls -l total 12 -rwx------ 1 root root 701 Dec 4 2020 ks-script-9ku3azco -rwx------ 1 root root 671 Dec 4 2020 ks-script-xitofm08 drwxr-xr-x 2 root root 4096 Jul 10 03:02 test -rw-r--r-- 1 root root 0 Jul 10 03:04 testfile01.txt
「testfile01.txt」の中身のデータを表示します。
$ cat testfile01.txt test01 test01 test01
「testfile01.txt」を「testfile02.txt」へコピーします。
$ cp testfile01.txt testfile02.txt
ちなみに以下のように同じ名前の新規ファイルを作成し、コピーするとエラーとなってしまいます。
$ cp testfile01.txt testfile01.txt cp: 'testfile01.txt' and 'testfile01.txt' are the same file
新規に「testfile02.txt」というファイルが作成されたことが確認できます。
$ ls -l total 20 -rwx------ 1 root root 701 Dec 4 2020 ks-script-9ku3azco -rwx------ 1 root root 671 Dec 4 2020 ks-script-xitofm08 drwxr-xr-x 2 root root 4096 Jul 10 03:05 test -rw-r--r-- 1 root root 21 Jul 10 03:13 testfile01.txt -rw-r--r-- 1 root root 21 Jul 10 03:14 testfile02.txt
ファイルの中身を確認すると「testfile01.txt」のデータが表示され、コピーされたことが確認できます。
$ cat testfile02.txt test01 test01 test01
ファイルをディレクトリ内にコピーする
コピーの使用例として、以下では、「tmp」ディレクトリ配下でファイルとディレクトリを作成します。
- ファイル:testfile01.txt
- ディレクトリ:test
このファイル「testfile01.txt」をディレクトリ「test」へコピーします。
対象のファイルとディレクトリが表示されている事を確認します。
$ ls -l total 20 -rwx------ 1 root root 701 Dec 4 2020 ks-script-9ku3azco -rwx------ 1 root root 671 Dec 4 2020 ks-script-xitofm08 drwxr-xr-x 2 root root 4096 Jul 10 03:27 test -rw-r--r-- 1 root root 21 Jul 10 03:13 testfile01.txt -rw-r--r-- 1 root root 21 Jul 10 03:14 testfile02.txt
ファイルをディレクトリへコピーします。
$ cp testfile01.txt test/
カレントディレクトリではコピーが作成されていないことを確認します。
$ ls -l total 20 -rwx------ 1 root root 701 Dec 4 2020 ks-script-9ku3azco -rwx------ 1 root root 671 Dec 4 2020 ks-script-xitofm08 drwxr-xr-x 2 root root 4096 Jul 10 03:28 test -rw-r--r-- 1 root root 21 Jul 10 03:13 testfile01.txt -rw-r--r-- 1 root root 21 Jul 10 03:14 testfile02.txt
「test」ディレクトリ配下で「testfile01.txt」のファイルがコピーされていることが確認できます。
$ ls -l test/ total 4 -rw-r--r-- 1 root root 21 Jul 10 03:28 testfile01.txt
複数のファイルをコピーする
次に複数のファイルを「test」ディレクトリへコピーします。
$ cp testfile01 testfile02.txt test/
まとめて「test」ディレクトリにファイルがコピーされたことが確認できます。
$ ls -l test/ total 8 -rw-r--r-- 1 root root 21 Jul 10 03:39 testfile01.txt -rw-r--r-- 1 root root 21 Jul 10 03:39 testfile02.txt
同じファイルがある場合は上書きをするかメッセージ表示される
コピー先に同じファイルがある場合は以下のように、ファイルを上書きするか確認が求められます。
- 上書きOKであれば「y」
- 上書きNGであれば「n」
を入力します。
$ cp testfile01.txt testfile02.txt test/ cp: overwrite 'test/testfile01.txt'? y cp: overwrite 'test/testfile02.txt'? y
間違って上書きされないように注意しましょう。
ディレクトリ全体をコピー
ディレクトリ全体をコピーするには「-r」オプションを使用します。
以下では「test」ディレクトリを「test01_dir」という新しいディレクトリとしてコピーします。
$ cp -r test/ test01_dir/
新規に「test01_dir」が作成されたことを確認します。
$ ls -l total 28 -rwx------ 1 root root 701 Dec 4 2020 ks-script-9ku3azco -rwx------ 1 root root 671 Dec 4 2020 ks-script-xitofm08 drwxr-xr-x 2 root root 4096 Jul 10 03:38 test drwxr-xr-x 2 root root 4096 Jul 10 03:54 test01_dir drwxr-xr-x 3 root root 4096 Jul 10 03:44 test02_dir -rw-r--r-- 1 root root 21 Jul 10 03:13 testfile01.txt -rw-r--r-- 1 root root 21 Jul 10 03:14 testfile02.txt
「test01_dir」配下に「test」ディレクトリのファイルがコピーされていることが確認できます。
$ ls -l test01_dir/ total 8 -rw-r--r-- 1 root root 21 Jul 10 03:54 testfile01.txt -rw-r--r-- 1 root root 21 Jul 10 03:54 testfile02.txt
ディレクトリを別ディレクトリ内へコピー
「test」ディレクトリ全体を「test02_dir」配下にコピーする際は以下のコマンドとなります。
$ cp -r test/ test02_dir/
コピー後、「test02_dir」配下に「test」ディレクトリがコピーされたことが確認できます。
$ ls -l test02_dir/ total 4 drwxr-xr-x 2 root root 4096 Jul 10 03:44 test
コピーされた「test」配下のファイルも同じくコピーされていることが確認できます。
$ ls -l test02_dir/test/ total 8 -rw-r--r-- 1 root root 21 Jul 10 03:44 testfile01.txt -rw-r--r-- 1 root root 21 Jul 10 03:44 testfile02.txt
「cp」コマンドオプション
「cp」コマンドのオプションは以下の通りとなります。
$ cp --help 使用法: 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 -c deprecated, same as --preserve=context --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 バージョン情報を表示して終了する By default, sparse SOURCE files are detected by a crude heuristic and the corresponding DEST file is made sparse as well. That is the behavior selected by --sparse=auto. Specify --sparse=always to create a sparse DEST file whenever the SOURCE file contains a long enough sequence of zero bytes. Use --sparse=never to inhibit creation of sparse files. When --reflink[=always] is specified, perform a lightweight copy, where the data blocks are copied only when modified. If this is not possible the copy fails, or if --reflink=auto is specified, fall back to a standard copy. Use --reflink=never to ensure a standard copy is performed. 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: <https://www.gnu.org/software/coreutils/> Report cp translation bugs to <https://translationproject.org/team/> Full documentation at: <https://www.gnu.org/software/coreutils/cp> or available locally via: info '(coreutils) cp invocation'
「cp」コマンドの使い方は以上となります。
エンジニアのオンライン学習
エンジニアにおすすめのオンライン教材比較 | |
ITエンジニアが自宅で学習ができるオンラインスクール比較 | |