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

一、命令簡介

cp(Copy file):將源文件複製至目標文件,或將多個源文件複製至目標目錄。node

二、用法

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

三、選項

  -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

四、實例

實例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")
相關文章
相關標籤/搜索