cp コマンドは、GNU coreutils に含まれるファイルやディレクトリをコピーするためのコマンドです。Unix 系 OS において標準的に使用され、FreeBSD などの BSD 系 OS でも cp コマンドは提供されていますが、GNU coreutils 版とはオプションの挙動が異なる場合があります。

基本的な使い方

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

主なオプション

編集
主なオプション
オプション 説明
-r, --recursive ディレクトリを再帰的にコピー
-i, --interactive 上書き前に確認
-f, --force 上書きを強制
-v, --verbose コピー中のファイル名を表示
-u, --update 既存のファイルより新しい場合のみコピー
-a, --archive ファイルの属性やシンボリックリンクを保持してコピー
-p, --preserve 所有者、パーミッション、タイムスタンプなどを保持
-L, --dereference シンボリックリンクを解決してコピー
  1. 単純なファイルコピー
    cp file1.txt file2.txt
    
    file1.txtfile2.txt にコピー(file2.txt が存在する場合は上書き)。
  2. ディレクトリを再帰的にコピー
    cp -r dir1 dir2
    
    dir1 内のすべてのファイルとサブディレクトリを dir2 にコピー。
  3. 確認しながらコピー
    cp -i file1.txt file2.txt
    
    file2.txt が存在する場合、上書きするか確認される。
  4. 詳細な出力付きコピー
    cp -v file1.txt file2.txt
    
    コピーの進行状況が表示される。
  5. アーカイブモードでコピー
    cp -a dir1 dir2
    
    ディレクトリ dir1dir2 にコピーし、ファイルの属性を保持。

FreeBSD との違い

編集

FreeBSD でも cp コマンドは提供されていますが、GNU coreutils 版とはいくつかのオプションの違いがあります。特に --archive (-a) オプションは BSD cp にはなく、代わりに -p を使うことが推奨されます。

cp -Rp dir1 dir2  # FreeBSD でアーカイブ風のコピー

必要なら FreeBSD でも coreutils パッケージをインストールすれば GNU 版の cp (gcp) を使用できます。

pkg install coreutils
gcp -a dir1 dir2

詳しい違いを確認するには、man cp でそれぞれのシステムのマニュアルを参照してください。