cpコマンドのオプションと確認なしの一括上書き設定 | yes・バックスラッシュの2つの方法

cp コマンドで複数のファイルをコピーすると、ファイルごとに上書きの確認が出て作業が止まります。cpコマンドはCopyの略で、ファイルとディレクトリをコピーします。この記事では、基本的な使い方とオプション、確認なしで一括上書きする2つの方法をまとめました。
cpコマンドは、コピー先に同じ名前のファイルがあると確認せずに上書きします。これを防ぐために[alias cp='cp -i']が設定されており、上書きの前に確認を求めるようになっています。
✅ 基本的な使い方
基本的な使い方は次のとおりです。
cp -[オプション] <コピーする ファイル または ディレクトリ> <コピー先 パス または ファイル または ディレクトリ パス>コピーする対象を先に書き、コピー先または新しい名前をその後ろに書きます。

# ファイル > ファイルにコピー
cp file1 file2
# ファイル > ディレクトリ内にコピー
cp file1 dir1/
# 2つのファイル > ディレクトリ内にコピー
cp file1 file2 dir1/ testuser]# cp dir1/ dir2/
cp: -r not specified; omitting directory 'dir1/'
ディレクトリのコピーには、-rまたは-R、あるいは-aオプションが必要です。
- -r/-R : ディレクトリと配下の内容を再帰的にコピー
- -a : 属性を保持して再帰的にコピー(内部に-rを含む)
✅ cpコマンドで一括上書きする2つの方法
cpコマンドを実行すると[overwrite]を聞かれるのは、cpに[cp -i]のエイリアス(alias)が設定されているためです。
cp -a
cp: overwrite 'messages_ori'? y
~]# alias cp
alias cp='cp -i'ファイルが1つか2つなら問題ありませんが、複数のファイルをコピーするときはファイルごとに答える必要があり手間がかかります。
このような場合は、次の2つの方法で確認なしに上書きできます。
yes | cp -ar /home/ ./1つ目は[yes |]を前に付ける方法で、確認のたびにyが自動で入力されそのままコピーされます。2つ目はコマンドの前にバックスラッシュ[\]を付ける方法で、エイリアスを通さずに本来のcpコマンドが実行されます。
\cp -ar /home/ ./✅ cpコマンドのオプション & シミュレーター
| オプション | 説明 | |
|---|---|---|
| -a | --archive元ファイルの権限、所有者、グループ、時刻情報などをすべて保持してコピー[権限、所有者、グループ、時刻情報などをすべて保持] + [-d : シンボリックリンク自体をコピー] + [-R : ディレクトリを再帰的にコピー] | |
| -b | コピー先がすでに存在する場合、既存のファイルをバックアップしてからコピー | |
| -d | コピー元がシンボリックリンクの場合、リンク自体をコピー | |
| -f | コピー先のファイルがある場合、強制的に削除してコピー | |
| -i | --interactive上書きの前にユーザーへ確認を求めるalias cp='cp -i' | |
| -l(小文字) | ハードリンクとしてコピー | |
| -P | シンボリックリンクをたどらず、リンクのままコピー | |
| -p | コピー元の所有者、グループ、権限、時刻情報をそのまま保持 | |
| -r, -R | ディレクトリを再帰的にコピー(サブディレクトリとファイルを含む)-rオプションはPOSIX非標準で、シンボリックリンクやデバイスファイルの処理で問題が起きることがあります。 | |
| -s | シンボリックリンクとしてコピー(コピー元を絶対パスで指定する必要あり) | |
| -u | コピー先のファイルのほうが新しい、または同じ場合は上書きしない | |
| -v | コピーの進行状況を表示(verbose)コピーが完了したことを示すメッセージを表示するオプション | |
| -x | コピー元とコピー先のファイルシステムが異なる場合はコピーしません。 |
🔲 -aオプション:元ファイルの属性を保持 & サブディレクトリ(とファイル)をコピー
元ファイルの属性を保持したままサブディレクトリまでコピーするなら、[-a]オプションだけで十分です。ただし、スクリプトや自動化ツールが[-r]を明示的に求める場合があるため、[-r]や[-R]オプションを併用することもあります。
testuser]# cp -a dir1 dir2
testuser]# ll dir*
dir1:
total 0
-rw-r--r-- 1 root root 0 Jun 8 14:11 file1
-rw-r--r-- 1 root root 0 Jun 8 14:15 file2
dir2:
total 0
-rw-r--r-- 1 root root 0 Jun 8 14:11 file1
-rw-r--r-- 1 root root 0 Jun 8 14:15 file2
testuser]# [-d : シンボリックリンク自体をコピー]+[-R : ディレクトリを再帰的にコピー]+[--preserve=all]
| --preserve=all に含まれる項目 | 説明 |
|---|---|
| mode | ファイルの権限(rwxなど) |
| ownership | 所有者(user)とグループ(group) |
| timestamps | 最終更新時刻などのタイムスタンプ |
| links | ハードリンク数(同じinodeの共有を維持) |
| context | SELinuxセキュリティコンテキスト |
| xattr | 拡張属性(ファイルに付加的に保存されるメタデータ) |
| all | 上記のすべての項目をまとめて含む省略形 |
🔲 -uオプション:追加・変更されたファイルだけをコピー
- コピー先に同じ名前のファイルがない、または コピー元のほうが新しい場合にだけコピー
- バックアップや同期でよく使用
testuser]# cp -u file1 file2
testuser]# ll file*
-rw-r--r-- 1 root root 0 Jun 8 14:11 file1
-rw-r--r-- 1 root root 0 Jun 8 14:30 file2
ℹ️ 提携について
当サイトのコンテンツにはアフィリエイトリンクが含まれています。訪問者がこのリンクを通じて商品やサービスを購入すると、当サイトは販売元から手数料を受け取ります。この過程において、購入者が支払う金額(イベント割引適用で金額が下がります↓)は上昇しません。掲載されている価格・割引・在庫情報は作成時点のものであり、実際とは異なる場合がありますので、ご購入前に販売元にて最終確認をお願いいたします。商品の選定および評価は独自の基準に基づいて行われており、手数料の支払いの有無は紹介順や評価内容に影響を与えません。