cp命令


  1. 命令格式

    cp [OPTION]... [-T] SOURCE DEST

    cp [OPTION]... SOURCE... DIRECTORY

    cp [OPTION]... -t DIRECTORY SOURCE...

  2. 命令描述

    拷貝文件和目錄

  3. 參數說明

    -a, --archive : 等同於-dR --preserve=all

    --backup[=CONTROL] :對每個現有文件進行備份 CONTROL爲可選參數,其值爲

         none, off:從不備份(即使給出 --backup)

         numbered, t:用編號備份

         existing, nil :如果編號備份存在則使用編號備份,否者用簡易備份[譯註:也就是用波浪號]

         simple, never :總是使用簡易備份

    -b : 等同於--backup ,不帶值

    -f 或 --force : 強行復制文件或目錄, 不論目的文件或目錄是否已經存在

    -i 或 --interactive : 覆蓋文件之前先詢問用戶

    -l 或 --link : 對源文件建立硬鏈接,而非複製文件

    -p 或 --preserve : 保留源文件或目錄的屬性,包括所有者、所屬組、權限與時間

    -P 或 --no-dereference : 從不繼承源文件的符號鏈接* (這裏我測試,cp一個符號鏈接文件後,新文件也是一個符號鏈接文件)

    -r : 遞歸處理,將指定目錄下的文件與子目錄一併處理。若源文件或目錄的形態,不屬於目錄或符號鏈接,則一律視爲普通文件處理

    -R 或 --recursive : 遞歸處理,將指定目錄下的文件及子目錄一併處理

    -s 或 --symbolic-link :對源文件建立符號鏈接,而非複製文件

    -S <備份字尾字符串> 或 --suffix=<備份字尾字符串> : 用"-b"參數備份目的文件後,備份文件的字尾會被加上一個備份字符串。默認的備份字尾符串是符號"~"

    -u 或 --update : 使用這項參數之後,只會在源文件的修改時間(Modification Time)較目的文件更新時,或是名稱相互對應的目的文件並不存在,才複製文件

    -v 或 --verbose : 顯示執行過程

    --version : 顯示版本

    -x 或 --one-file-system複製的文件或目錄存放的文件系統,必須與cp指令執行時所處的文件系統相同,否則不復制,亦不處理位於其他分區的文件

    --help顯示在線幫助

    --sparse=<使用時機>設置保存希疏文件的時機,可選參數
                 auto:源文件的稀疏性僅僅通過簡單的方法判斷,對應的目標文件目標文件也被爲稀疏
                 always : 不論源文件是否包含足夠長的0 序列也將目標文件創建爲稀疏件。
                 never: 禁止創建稀疏文件。


  4. 示例

    1. -b的用法

      sly@fskj-u-sly:~/st$ ls 
      1.txt  2.txt
      sly@fskj-u-sly:~/st$ cp -b -S .bak 1.txt 2.txt 
      cp:是否覆蓋"2.txt"? y
      sly@fskj-u-sly:~/st$ ls -l
      總用量 0
      -rw-rw-r-- 1 sly sly 0  7月 21 17:02 1.txt
      -rw-rw-r-- 1 sly sly 0  7月 21 17:36 2.txt
      -rw-rw-r-- 1 sly sly 0  7月 21 17:35 2.txt.bak
    2. 創建硬鏈接

      sly@fskj-u-sly:~/st$ cp -l 1.txt 2.txt 
      sly@fskj-u-sly:~/st$ ls -li    #這個參數i是查看inode號,可以看到,兩個文件的inode一樣
      總用量 0
      1834184 -rw-rw-r-- 2 sly sly 0  7月 21 17:02 1.txt
      1834184 -rw-rw-r-- 2 sly sly 0  7月 21 17:02 2.txt
    3. 創建符號鏈接

      sly@fskj-u-sly:~/st$ ln -s 1.txt 2.txt
      sly@fskj-u-sly:~/st$ ls -l
      總用量 0
      -rw-rw-r-- 1 sly sly 0  7月 21 17:02 1.txt
      lrwxrwxrwx 1 sly sly 5  7月 21 17:26 2.txt -> 1.txt
    4. 將一個目錄的文件複製到另一個目錄

      sly@fskj-u-sly:~$ cp -R st st2
      sly@fskj-u-sly:~$ ls -l st2/
      總用量 0
      -rw-rw-r-- 1 sly sly 0  7月 21 17:28 1.txt
      lrwxrwxrwx 1 sly sly 5  7月 21 17:28 2.txt -> 1.txt
      sly@fskj-u-sly:~$ ls -l st
      總用量 0
      -rw-rw-r-- 1 sly sly 0  7月 21 17:02 1.txt
      lrwxrwxrwx 1 sly sly 5  7月 21 17:26 2.txt -> 1.txt
    5. 如果目錄已經存在不能使用上述方法

      sly@fskj-u-sly:~$ ls -ld st2 st/
      drwxrwxr-x 2 sly sly 4096  7月 21 17:26 st/
      drwxrwxr-x 2 sly sly 4096  7月 21 17:30 st2
      sly@fskj-u-sly:~$ cp -R st st2    
      sly@fskj-u-sly:~$ ls -l st2/    # 你會發現將整個目錄拷貝過去了
      總用量 4
      drwxrwxr-x 2 sly sly 4096  7月 21 17:31 st
      sly@fskj-u-sly:~$ cp -R st/* st2
      sly@fskj-u-sly:~$ ls -l st2/
      總用量 0
      -rw-rw-r-- 1 sly sly 0  7月 21 17:33 1.txt
      lrwxrwxrwx 1 sly sly 5  7月 21 17:33 2.txt -> 1.txt
    6. 使用-p參數保留源文件的屬性(這裏使用sudo是爲了有權限創建www-data用戶的文件)

      sly@fskj-u-sly:~/st$ ls -l
      總用量 0
      -rw-rw-r-- 1 www-data www-data 0  7月 21 17:02 1.txt
      sly@fskj-u-sly:~/st$ date && sudo cp 1.txt 2.txt && sudo cp -p 1.txt 3.txt
      2015年 07月 21日 星期二 17:47:04 CST
      sly@fskj-u-sly:~/st$ ls -l     #可以看出,加了-p參數後,目標文件的權限和時間信息都沒用修改
      總用量 0
      -rw-rw-r-- 1 www-data www-data 0  7月 21 17:02 1.txt
      -rw-r--r-- 1 root     root     0  7月 21 17:47 2.txt
      -rw-rw-r-- 1 www-data www-data 0  7月 21 17:02 3.txt


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章