cp - ファイルをコピーする

スポンサーリンク

cpコマンドはファイルをコピーするコマンドです。

Linuxコマンドの中でとても基本的なコマンドのひとつで、よく使用されるコマンドです。

スポンサーリンク

cpコマンドの利用例

ファイルをコピー
(オプションなし)

cpコマンドは、ファイルをコピーするコマンドです。cpコマンドには以下の構文が利用できます。

sourceはコピー元のファイルで、destはコピー先のファイルになります。

コマンド例

コマンド例実行前

実行結果

 

また、ファイルをあるディレクトリにコピーする場合は以下の構文も利用できます。

または

この構文はファイルを別のディレクトリにコピーする場合に利用できます。ファイル名はコピー元のファイル名がコピー先のファイルにそのまま使われます。

コマンド例は、カレントディレクトリにあるすべてのtxtファイルをdirという名前のディレクトリにコピーします。

コマンド例

コマンド例実行前

実行結果

 

 

 

ディレクトリをコピー
(-Rオプションまたは-rオプション)

-Rオプションまたは-rオプションは、再帰的にディレクトリをコピーします。

コマンド例

コマンド例実行前

実行結果

 

コピー先のディレクトリが既に存在する場合は-Tオプションを用います。(コピー先のディレクトリの中にコピー元の指定したディレクトリをそのままコピーする場合は-Tオプションは必要ありません)

コマンド例

コマンド例実行前

実行結果

 

 

 

ディレクトリ関係
(-tオプションと-Tオプション)

cpコマンドは構文として最後の宛先ファイルにディレクトリまたはディレクトリのシンボリックファイルを指定すると最後の引数を特別に扱います。

どのように扱うかというとdirという名前のディレクトリが存在するときに

は以下のコマンドと等価になります。

 

このディレクトリの指定は-tオプションで行うこともできます。

コマンド例

コマンド例実行前

実行結果

 

-Tオプションを用いると最後の引数がディレクトリの場合、特別に扱わないようにできます。例えば、ディレクトリをコピーするとき、-Tオプションをつけない場合のコピーは以下のようになります。

コマンド例

コマンド例実行前

実行結果

 

コピー先のディレクトリの中にコピー元のディレクトリがコピーされます。-Tオプションを用いた場合は以下のようになります。

コマンド例

コマンド例実行前

実行結果

この場合は、コピー元のディレクトリの内容がコピー先のディレクトリにコピーされます。

また、-Tオプションはディレクトリのシンボリックファイルをコピーするときに利用できます。

コマンド例

コマンド例実行前

実行結果

シンボリックファイルをコピーするとき、-Tオプションを用いない場合は以下のようにシンボリックファイル先のディレクトリにコピーされます。
コマンド例と実行結果

 

 

 

属性の保持
(-pオプション)

-p(--preserve)オプションは、ファイル属性を保持するオプションです。

-pオプションではなく、--preserveオプションを用いると以下の属性リストを指定することができます(複数の場合はコンマ区切りで指定)。-pオプションの場合は、mode、ownership、timestampsが指定された状態となり、これらが何も指定しない場合のデフォルトになります。
また、保存しない属性を指定する場合は--no-preserveオプションを利用できます。

属性リストの種類

属性リスト 意味
mode アクセス権の保持
ownership 所有者とグループの情報を保持
timestamps 最終アクセス時間(atime)と最終修正時間(mtime)の保持
links 複数のファイルをコピーするときファイル間のリンクを保持
シンボリックリンクはハードリンクに変換
context SELinuxのコンテキストを保持
xattr 拡張ファイル属性を保持
all すべての属性リストを指定

 

デフォルト

デフォルトは、アクセス権の保持(mode)、所有者とグループの保持(ownership)、タイムスタンプの保持(timestamps)になります。
また、所有者とグループの保持には適切な権限を持っている必要があります。

コマンド例

コマンド例実行前

実行結果

コマンド例と実行結果(権限がない場合)

 

 

 

アクセス権の保持

コマンド例

 

コマンド例実行前

 

実行結果

 

 

 

所有者とグループの保持

所有者とグループの保持には適切な権限を持っている必要があります。

コマンド例

コマンド例実行前

実行結果

 

 

 

タイムスタンプの保持

コマンド例

コマンド例実行前

実行結果

 

 

 

リンクの保持

複数のファイルをコピーするとき、ファイル間のリンクが保持されます。シンボリックリンクはハードリンクに変換されます。

コマンド例

コマンド例実行前

実行結果

コマンド例と実行結果(シンボリックリンクをたどらない場合)

 

 

 

コンテキストを保持

SELinuxの機能がある場合に利用できます。

コマンド例

コマンド例実行前

実行結果

 

 

 

拡張ファイル属性の保持

コマンド例

コマンド例実行前

実行結果

拡張ファイル属性はattrパッケージ等をインストールすることで利用できます。
コマンド例
拡張ファイル属性についてはmanで確認することができます。
コマンド例

また、拡張ファイル属性は以下のコマンド等で利用できます。
コマンド例

 

 

 

対話モード
(-iオプション)

-iオプションを用いると、宛先ファイルが存在する場合、上書きするかどうかを確認する対話モードになります。

対話モードの実行結果

 

 

 

強制的にコピー
(-fオプション)

通常、cpコマンドは既存ファイルが存在し、そのファイルの書き込み権限がなく、ファイルを開くことができない場合はコピーに失敗します。

コピーの失敗例

-fオプションを用いるとそのファイルを削除した後に再度コピーを行います。また、-iオプションとは独立しているため、-iオプションは無効になりません。

関係するオプションとして、--remove-destinationオプションがあります。--remove-destinationオプションはファイルを開く前に宛先のファイルを削除します。

-fオプションは--remove-destinationオプションの違いは、ファイルが開くことができる場合、-fオプションはファイルの内容のみをコピーしファイルの権限などの属性を既存のファイルのまま維持しますが、--remove-destinationオプションはcpコマンドでファイルを作成したときのファイル属性に変更されます。

コマンド例

コマンド例実行前

実行結果

--remove-destinationオプションと-fオプションの違いの例は以下のようになります。-fオプションの場合はファイルの権限が変化していませんが、--remove-destinationオプションの場合は、コピーを行う前に一度ファイルを削除するためファイルの権限が変更されています。
実行前とコマンド例と実行結果

 

 

 

コピーするファイルを表示
(-vオプション)

cpコマンドの冗長モード(詳細な情報を表示するモード)で、cpコマンドがコピーするファイル名を表示します。

コマンド例と実行結果

 

 

 

ファイルの親ディレクトリを作成してコピー
(--parentsオプション)

--parentsオプションは、既存のディレクトリにコピーするときに、コピー元のファイルへのディレクトリも作成してファイルをコピーします。

コマンド例

コマンド例実行前

実行結果

 

 

 

存在するファイルを上書きしない
(-nオプション)

-nオプションを用いると存在するファイルに対して上書きを行いません。
コマンド例と実行結果

 

 

 

ファイルの更新
(-uオプション)

-uオプションを用いると、コピー元のファイルのタイムスタンプがコピー先のファイルのタイムスタンプより新しい場合にコピーを行います(タイムスタンプが同じ場合はコピーしません)。

コマンド例と実行結果

 

 

 

ハードリンクの作成
(-lオプション)

-lオプションは、ファイルのハードリンクを作成することができます。

コマンド例

コマンド例実行前

実行結果

 

 

 

シンボリックリンクの作成
(-sオプション)

-sオプションは、ファイルのシンボリックリンクファイルを作成することができます。

コマンド例と実行結果

 

 

 

シンボリックリンクファイル関係
(-Lオプションと-Pオプションと-Hオプションと-dオプション)

-Lオプションの場合、すべてのシンボリックリンクファイルをたどり、シンボリックリンクファイル先のファイルをコピーします。

コマンド例

コマンド例実行前

実行結果

 

また、-Hオプションの場合、コマンドライン引数で指定したシンボリックリンクファイルのみをたどります。

コマンド例

コマンド例実行前

実行結果

 

-Pオプションの場合、シンボリックリンクファイルをたどらずに、シンボリックリンクファイル自体をコピーします。

コマンド例

コマンド例実行前

実行結果

 

-dオプションは、-Pオプションと--preserve=linksを合わせたオプションで、シンボリックリンクファイルはシンボリックリンク自体をコピーし、さらに複数のファイルをコピーしているときはファイルのハードリンクの関係を維持してコピーします。

コマンド例

コマンド例実行前

実行結果

 

 

 

可能な限り構造を維持してコピー
(-aオプション)

-aオプションは、ファイルやディレクトリの構造を維持して、データをコピーします。
また、-aオプションは、「cp -dR --preserve=all」と同じになります。また、所有者とグループの保持には適切な権限を持っている必要があります。

コマンド例

コマンド例実行前

実行結果

権限がない場合の実行結果は以下のようになります。所有者やグループの情報をコピーしていませんが、可能な限りファイルをコピーします。
コマンド例

実行結果

 

 

 

バックアップ
(-bオプション)

-bオプションで、ファイルが上書きされるときに、その上書きされる前のファイルをバックアップとして保存することができます。

バックアップされるファイルの接尾辞には、環境変数SIMPLE_BACKUP_SUFFIXの値がつけられます。SIMPLE_BACKUP_SUFFIXが特に設定されていない場合は、デフォルトとして~(チルダ)が使用され、末尾に~をつけたファイルがバックアップとして保存されます。

コマンド例

コマンド例実行前

実行結果

 

また、-fオプションと組み合わせることで同じファイルに対してコピーするとき、コピー元のファイルのバックアップを作成できます。

コマンド例

コマンド例実行前

実行結果

 

ロングオプションの--backupオプションを用いるといくつかのバックアップの機能を利用することができます。また、バックアップを作成するときに-Sオプションで接尾辞を指定することもできます。

バックアップの機能

機能 意味
none
off
バックアップを作成しない
numbered
t
常に番号付きのバックアップを作成
existing
nil
(デフォルト)
既に番号付きのバックアップが存在するならば、
番号付きのバックアップを作成
それ以外は単純なバックアップを作成
simple
never
常に単純なバックアップを作成

 

コマンド例と実行結果

 

 

 

参考

GNU Coreutils: cp invocation