Linuxコマンドのcpコマンドの使い方について書いています。
cpコマンドを使うことで、ファイルやディレクトリをコピーすることができます。
今回載せているコマンドはUbuntu 24.04.1で確認しました!
cpコマンドの使い方
cpコマンドを使うと、ファイルやディレクトリをコピーできます。
よく使うファイルコピーとディレクトリコピーの構文は下記のようになります。
単一ファイルのコピー:
$ cp (オプション) コピー元 コピー先
ディレクトリのコピー:
$ cp -r コピーディレクトリ/ コピー先ディレクトリ/
実際に使ってみる
実際に使ってみます。
まず、lsコマンドで確認すると、下記のようなファイルが存在します。
$ ls -l
total 0
-rw-r--r-- 1 yasuaki yasuaki 0 Jan 19 08:18 source.txt
cpコマンドを使って、source.txtファイルをコピーしてみます。
$ cp source.txt test.txt
source.txtファイルをtest.txtという名前でコピーしました。
実行後にlsコマンドで確認すると、下記のようにファイルがコピーされました。
$ ls -l
total 0
-rw-r--r-- 1 yasuaki yasuaki 0 Jan 19 08:18 source.txt
-rw-r--r-- 1 yasuaki yasuaki 0 Jan 19 08:30 test.txt
cpコマンドのサンプル5つ
cpコマンドを使ったサンプルを5つ載せています。
ディレクトリごとコピーする
ディレクトリをコピーするには-rオプションを使います。
$ cp -r source_dir/ destination_dir/
上書き確認をする
既存のファイルを上書きする前に確認するには-iオプションを使います。
$ cp -i source.txt destination.txt
ファイルがない場合は、確認がなくコピーされます。
ファイルがある場合には、下記のように確認がでるため、yを入力してエンターを押すと上書きされます。
$ cp -i source.txt destination.txt
cp: overwrite 'destination.txt'?
ファイルの属性を保持する
ファイルの権限やタイムスタンプなどの属性を保持するには-pオプションを使います。
$ cp -p source.txt destination.txt
シンボリックリンクの実体をコピーする
シンボリックリンクが指すファイルの実体をコピーするには-Lオプションを使います。
$ cp -L link.txt destination.txt
複数ファイルを一度にコピーする
複数のファイルを一度にディレクトリにコピーすることができます。
$ cp file1.txt file2.txt file3.txt destination_dir/
cpコマンドのオプション一覧
| オプション | 説明 |
|---|---|
| -a, –archive | -dR –preserve=all と同じ |
| –attributes-only | ファイルデータをコピーせず、属性のみをコピー |
| –backup[=CONTROL] | 既存の宛先ファイルのバックアップを作成 |
| -b | –backup と同様だが、引数を受け付けない |
| –copy-contents | 再帰的に特殊ファイルの内容をコピー |
| -d | –no-dereference –preserve=links と同じ |
| –debug | ファイルがどのようにコピーされるかを説明する。-vを含む |
| -f, –force | 既存の宛先ファイルが開けない場合、削除して再試行する(-nオプションが使用されている場合は無視される) |
| -i, –interactive | 上書き前に確認する(以前の -n オプションを上書き) |
| -H | ソース内のコマンドラインシンボリックリンクを追従 |
| -l, –link | ファイルをコピーするのではなくハードリンクを作成 |
| -L, –dereference | ソース内のシンボリックリンクを常に追従 |
| -n, –no-clobber | 既存のファイルを上書きせず、失敗しない(-u または以前の -i オプションを上書き) |
| -P, –no-dereference | ソース内のシンボリックリンクを決して追従しない |
| -p | –preserve=mode,ownership,timestamps と同じ |
| –preserve[=ATTR_LIST] | 指定された属性を保持 |
| –no-preserve=ATTR_LIST | 指定された属性を保持しない |
| –parents | ディレクトリ内でフルソースファイル名を使用 |
| -R, -r, –recursive | ディレクトリを再帰的にコピー |
| –reflink[=WHEN] | クローン/CoWコピーを制御 |
| –remove-destination | 開く前に既存の宛先ファイルを削除 |
| –sparse=WHEN | スパースファイルの作成を制御 |
| –strip-trailing-slashes | 各ソース引数から末尾のスラッシュを削除 |
| -s, –symbolic-link | コピーするのではなくシンボリックリンクを作成 |
| -S, –suffix=SUFFIX | 通常のバックアップサフィックスを上書き |
| -t, –target-directory=DIRECTORY | すべてのソース引数をディレクトリにコピー |
| -T, –no-target-directory | DESTを通常のファイルとして扱う |
| –update[=UPDATE] | どの既存ファイルが更新されるかを制御; UPDATE={all,none,older(default)} |
| -u | –update[=older] と同等 |
| -v, –verbose | 実行中の操作を説明 |
| -x, –one-file-system | このファイルシステムに留まる |
| -Z | 宛先ファイルのSELinuxセキュリティコンテキストをデフォルトタイプに設定 |
| –context[=CTX] | -Zと同様、またはCTXが指定されている場合はSELinuxまたはSMACKセキュリティコンテキストをCTXに設定 |
| –help | このヘルプを表示して終了 |
| –version | バージョン情報を出力して終了 |
cpコマンドの使い方まとめ
今回はcpコマンドについて書きました。
記事の内容をまとめると、下記のようになります。
・cpコマンドを使うことで、ファイルやディレクトリをコピーできた
・ディレクトリのコピーには-rオプションが必要だった
・様々なオプションを組み合わせることで、柔軟なコピー操作が可能だった
・ディレクトリのコピーには-rオプションが必要だった
・様々なオプションを組み合わせることで、柔軟なコピー操作が可能だった

コメント