cp 指令選項與不經確認一次覆寫 | yes 與反斜線 2 種方法

測試環境RHEL 系列AlmaLinux 9.8root 帳號2026-10-05 確認

cp 複製多個檔案時會逐一詢問是否覆寫,讓工作停下來。cp 指令是 Copy 的縮寫,用來複製檔案和目錄,本文整理了基本用法、選項,以及不經確認一次覆寫的 2 種方法。

目的地有同名檔案時,cp 指令會不經詢問直接覆寫。為了避免這種情況而設定了 [alias cp='cp -i'],所以覆寫前會先詢問確認。

✅ 基本使用方法

基本用法如下。

cp -[選項] <來源 檔案 或 目錄​> <目的地 路徑 或 檔案 或 目錄 路徑​>

先寫要複製的對象,再在後面寫目的地或新名稱。

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'

只有一兩個檔案還好,複製多個檔案時每個都要回答,很麻煩。

這時可以用下面兩種方法不經確認直接覆寫。

yes | cp -ar /home/ ./

第一種是在前面加上 [yes |],每次確認都會自動輸入 y,直接完成複製。第二種是在指令前面加上反斜線 [\],不經過別名,直接執行原本的 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來源與目標的檔案系統不同時不複製。
cp 指令模擬器alias cp='cp -i'
[root@server work]#
只在瀏覽器中運作,不會動到真正的檔案。請試著變換 cp 選項輸入,再用 ls、cat、diff 確認結果。用鍵盤 ↑↓ 可以叫出之前輸入的指令,輸入 uknew help 會列出可用的指令。

🔲 -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)
contextSELinux 安全性內容
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
Linux

ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。