每天一個linux命令(6):cp


1、命令簡介

cp(Copy file):將源文件復制至目標文件,或將多個源文件復制至目標目錄。

2、用法

     cp [選項]... [-T] 源文件 目標文件
 或:cp [選項]... 源文件... 目錄
 或:cp [選項]... -t 目錄 源文件...

3、選項

  -a, --archive       等於-dR --preserve=all,與同時指定 -dpR 這三個選項效果一樣,用於復制整個目錄,包括目錄中的子目錄等都遞歸的復制,而且還要保持文件的訪問模式,所有者,時間戳等屬性與原文件一樣。
      --backup[=CONTROL        為每個已存在的目標文件創建備份
  -b                類似--backup 但不接受參數
      --copy-contents        在遞歸處理是復制特殊文件內容
  -d                等於--no-dereference --preserve=links
  -f, --force            如果目標文件無法打開則將其移除並重試(當 -n 選項存在時則不需再選此項)
  -i, --interactive        覆蓋前詢問(使前面的 -n 選項失效),默認cp命令覆蓋目標文件時是不會提示的,很多Linux發行版里的cp都被設置別名`cp -i`,其實作用就是給用戶一個提醒。如果你不想被提示,那么請這樣輸入:\cp source target,或者使用cp命令的絕對路徑/bin/cp
  -H                跟隨源文件中的命令行符號鏈接
  -l, --link 對源文件建立硬鏈接,而非復制文件
  -L, --dereference        總是跟隨符號鏈接
  -n, --no-clobber        不要覆蓋已存在的文件(使前面的 -i 選項失效)
  -P, --no-dereference        不跟隨源文件中的符號鏈接
  -p                等於--preserve=模式,所有權,時間戳
      --preserve[=屬性列表    保持指定的屬性(默認:模式,所有權,時間戳),如果可能保持附加屬性:環境、鏈接、xattr 等
  -c                           same as --preserve=context
      --sno-preserve=屬性列表    不保留指定的文件屬性
      --parents            復制前在目標目錄創建來源文件路徑中的所有目錄
  -R, -r, --recursive 遞歸復制目錄及其子目錄內的所有內容
      --reflink[=WHEN]        控制克隆/CoW 副本。請查看下面的內如。
      --remove-destination    嘗試打開目標文件前先刪除已存在的目的地文件 (相對於 --force 選項)
      --sparse=WHEN        控制創建稀疏文件的方式
      --strip-trailing-slashes    刪除參數中所有源文件/目錄末端的斜杠
  -s, --symbolic-link 只創建符號鏈接而不復制文件
  -S, --suffix=后綴        自行指定備份文件的后綴
  -t,  --target-directory=目錄    將所有參數指定的源文件/目錄 復制至目標目錄
  -T, --no-target-directory    將目標目錄視作普通文件
  -u, --update 使用這項參數后只會在源文件的更改時間較目標文件更新時或是名稱相互對應的目標文件並不存在時,才復制文件; -v, --verbose 詳細顯示命令執行的操作。
  -x, --one-file-system        復制的文件或目錄存放的文件系統,必須與cp指令執行時所處的文件系統相同,否則不復制,亦不處理位於其他分區的文件
  -Z, --context=CONTEXT        set security context of copy to CONTEXT

4、實例

實例1:將文件a.txt復制成文件b.txt
[root@cent6 directory]# cp a.txt  b.txt
實例2:將文件a.txt復制成文件b.txt,顯示詳細信息 
[root@cent6 directory]# cp -v a.txt  b.txt
`a.txt' -> `b.txt'
實例3:復制文件,只有源文件較目的文件的修改時間新時,才復制文件

[root@cent6 directory]# cp -uv  a.txt  c.txt

實例4:采用交互方式將文件a.txt復制成文件d.txt
[root@cent6 directory]# cp -iv a.txt  d.txt
cp: overwrite `d.txt'? y
`a.txt' -> `d.txt'
實例5:將文件a.txt復制成d.txt,因為目的文件已經存在,所以指定使用強制復制的模式

[root@cent6 directory]# cp -fv a.txt  d.txt
`a.txt' -> `d.txt'

實例6:遞歸將目錄dir1復制到目錄dir2下面(此時dir2不存在
[root@cent6 directory]# cp -rv dir1 dir2
`dir1' -> `dir2'
`dir1/c.txt' -> `dir2/c.txt'
`dir1/a.txt' -> `dir2/a.txt'
`dir1/b.txt' -> `dir2/b.txt'
`dir1/d.txt' -> `dir2/d.txt'
實例7:遞歸將目錄dir1復制到目錄dir2下面(此時dir2已經存在
[root@cent6 directory]# cp -rv  dir1  dir2
`dir1/c.txt' -> `dir2/dir1/c.txt'
`dir1/a.txt' -> `dir2/dir1/a.txt'
`dir1/b.txt' -> `dir2/dir1/b.txt'
`dir1/d.txt' -> `dir2/dir1/d.txt'
實例8:復制時保留文件屬性

[root@cent6 directory]# ll
total 0
-rwxrwxrwx 1 root root 0 Apr 16 16:54 a.txt
[root@cent6 directory]# cp a.txt  /tmp/a1.txt
[root@cent6 directory]# cp -p a.txt  /tmp/a2.txt
[root@cent6 directory]# ll /tmp
total 12
-rwxr-xr-x  1 root  root     0 Apr 16 16:56 a1.txt
-rwxrwxrwx  1 root  root     0 Apr 16 16:54 a2.txt

實例9:復制時產生備份文件
[root@cent6 directory]# cp -bv a.txt  /tmp/
`a.txt' -> `/tmp/a.txt'
[root@cent6 directory]# cp -bv a.txt  /tmp/
`a.txt' -> `/tmp/a.txt' (backup: `/tmp/a.txt~')
[root@cent6 directory]# ll /tmp
total 0
-rwxr-xr-x 1 root root 0 Apr 16 17:02 a.txt
-rwxr-xr-x 1 root root 0 Apr 16 17:02 a.txt~
實例10:創建文件的硬鏈接(有同樣的inode),而不是拷貝它們
[root@oracledb dir1]# cp -l a.txt  b.txt
[root@oracledb dir1]# cp a.txt  c.txt
[root@oracledb dir1]# ls -li
總用量 0
4718769 -rw-r--r-- 2 root root 0 4月  16 17:18 a.txt
4718769 -rw-r--r-- 2 root root 0 4月  16 17:18 b.txt
4718772 -rw-r--r-- 1 root root 0 4月  16 17:28 c.txt
實例11:復制的 a.txt 建立一個連結檔 a_link.txt
[root@cent6 directory]# cp -sv a.txt  a_link.txt
`a.txt' -> `a_link.txt'
[root@cent6 directory]# ll
total 0
lrwxrwxrwx 1 root root 5 Apr 16 17:06 a_link.txt -> a.txt
-rwxrwxrwx 1 root root 0 Apr 16 16:54 a.txt
12:不隨符號鏈接拷貝原文件
[root@oracledb dir1]# ll
總用量 0
lrwxrwxrwx 1 root root 5 4月  16 17:30 a_link.txt -> a.txt
-rw-r--r-- 1 root root 0 4月  16 17:18 a.txt
[root@oracledb dir1]# cp -P a_link.txt  c.txt
[root@oracledb dir1]# ll
總用量 0
lrwxrwxrwx 1 root root 5 4月  16 17:30 a_link.txt -> a.txt
-rw-r--r-- 1 root root 0 4月  16 17:18 a.txt
lrwxrwxrwx 1 root root 5 4月  16 17:31 c.txt -> a.txt
實例13:指定備份文件尾標 
[root@oracledb dir1]# cp -v -S _bak a.txt   /tmp/
"a.txt" -> "/tmp/a.txt"
[root@oracledb dir1]# cp -v -S _bak a.txt   /tmp/
cp:是否覆蓋"/tmp/a.txt"? y
"a.txt" -> "/tmp/a.txt" (備份:"/tmp/a.txt_bak")


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM