cp命令(代碼片段)
cp命令用來將一個或多個源文件或者目錄復制到指定的目的文件或目錄。它可以將單個源文件復制成一個指定文件名的具體的文件或一個已經存在的目錄下。cp命令還支持同時復制多個文件,當一次復制多個文件時,目標文件參數必須是一個已經存在的目錄,否則將出現錯誤。
語法
cp(選項)(參數)
選項
-a:此參數的效果和同時指定"-dpR"參數相同; -d:當復制符號連接時,把目標文件或目錄也建立為符號連接,并指向與源文件或目錄連接的原始文件或目錄; -f:強行復制文件或目錄,不論目標文件或目錄是否已存在; -i:覆蓋既有文件之前先詢問用戶; -l:對源文件建立硬連接,而非復制文件; -p:保留源文件或目錄的屬性; -R/r:遞歸處理,將指定目錄下的所有文件與子目錄一并處理; -s:對源文件建立符號連接,而非復制文件; -u:使用這項參數后只會在源文件的更改時間較目標文件更新時或是名稱相互對應的目標文件并不存在時,才復制文件; -S:在備份文件時,用指定的后綴“SUFFIX”代替文件的默認后綴; -b:覆蓋已存在的文件目標前將目標文件備份; -v:詳細顯示命令執行的操作。
參數實例
如果把一個文件復制到一個目標文件中,而目標文件已經存在,那么,該目標文件的內容將被破壞。此命令中所有參數既可以是絕對路徑名,也可以是相對路徑名。通常會用到點.或點點..的形式。例如復制時出現未指定的錯誤,下面的命令將指定文件復制到當前目錄下:
cp ../mary/homework/assign .
所有目標文件指定的目錄必須是己經存在的,cp命令不能創建目錄。如果沒有文件復制的權限,則系統會顯示出錯信息。
將文件file復制到目錄/usr/men/tmp下復制時出現未指定的錯誤,并改名為file1
cp file /usr/men/tmp/file1
將目錄/usr/men下的所有文件及其子目錄復制到目錄/usr/zh中
cp -r /usr/men /usr/zh
交互式地將目錄/usr/men中的以m打頭的所有.c文件復制到目錄/usr/zh中
cp -i /usr/men m*.c /usr/zh
我們在Linux下使用cp命令復制文件時候,有時候會需要覆蓋一些同名文件,覆蓋文件的時候都會有提示:需要不停的按Y來確定執行覆蓋。文件數量不多還好,但是要是幾百個估計按Y都要吐血了,于是折騰來半天總結了一個方法:
cp aaa/* /bbb 復制目錄aaa下所有到/bbb目錄下,這時如果/bbb目錄下有和aaa同名的文件,需要按Y來確認并且會略過aaa目錄下的子目錄。 cp -r aaa/* /bbb 這次依然需要按Y來確認操作,但是沒有忽略子目錄。 cp -r -a aaa/* /bbb 依然需要按Y來確認操作,并且把aaa目錄以及子目錄和文件屬性也傳遞到了/bbb。 \cp -r -a aaa/* /bbb 成功,沒有提示按Y、傳遞了目錄屬性、沒有略過目錄。
相關內容
每天一個linux命令-cp
cp命令用于文件及目錄的復制,是linux常用的命令之一,一般情況下,shell會設置一個別名alias cp=‘cp -i‘,在命令行下復制文件時,如果目標文件已經存在,就會詢問是否覆蓋,不管你是否使用-i參數。但是如果是在shell腳本中執行cp時,沒有-i參數時不會詢問是否覆蓋。這說明命令行和shell腳本的執行方式有些不同。
1.命令格式:
cp []... [-T] DEST
cp []... ...
cp []... -t ...
2.命令參數:
cp [-] [源文件][目標文件]
-a:相當于-pdr
-d:若源文件為鏈接文件(like file),則復制鏈接文件屬性而非檔案本身
-f:強制,若目標檔案已經存在且無法開啟,則移除后在嘗試
-i:若目標文件已經存在,在覆蓋時會先詢問;
-p:連同檔案的屬性一起復制過來,而非使用默認屬性
-r:遞歸,用于復制目錄
-u:若目標文件存在。則目標文件比源文件舊時才復制;
3.命令實例:
1.復制單個文件到目標目錄,文件在目標目錄中不存在。
[[email?protected]?~]#?cp?a.txt?backup/ [[email?protected]?~]#?ll?a.txt? -rw-r--r--.?1?root?root?4?Jun?30?14:56?a.txt [[email?protected]?~]#?ll?backup/ total?4 -rw-r--r--.?1?root?root?4?Jul??4?22:07?a.txt [[email?protected]?~]#
說明:會發現兩個文件的時間戳是不一樣的,如果想要目標文件和源文件屬性一樣,可以使用-a選項
2.復制單個文件到目標目錄,文件在目標目錄中已存在,復制后的文件與源文件屬性一樣。
[[email?protected]?~]#?ll?a.txt? -rw-r--r--.?1?root?root?4?Jun?30?14:56?a.txt [[email?protected]?~]#?cp?-a?a.txt?backup/ cp:?overwrite?`backup/a.txt‘??y [[email?protected]?~]#?ll?backup/ total?4 -rw-r--r--.?1?root?root?4?Jun?30?14:56?a.txt [[email?protected]?~]#
說明:cp在復制文件時,如果目標目錄的文件是已存在的,會提示是否覆蓋文件,這是由于命令行下的cp是有別名的,使用alias | grep "cp"查看cp別名,alias cp=‘cp -i‘,-i參數是若目標文件已經存在,在覆蓋時會先詢問;如果不想提示詢問直接覆蓋,可以cp -n 或者/bin/cp。
3.復制目錄:
目標目錄不存在時
[[email?protected]?~]#?ls anaconda-ks.cfg??a.txt??backup??b.txt??c.txt??data??d.txt??ett.txt??e.txt??install.log??install.log.syslog??mkdirtest??oldboy.txt??readme.txt??test [[email?protected]?~]#?cp?-a?mkdirtest?mkdirtest2 [[email?protected]?~]#?ll?mkdirtest2 total?24 drwxr-xr-x.?2?root?root?4096?Jun?29?02:38?bin drwxr-xr-x.?4?root?root?4096?Jun?29?02:38?config drwxr-xr-x.?4?root?root?4096?Jun?29?02:38?info drwxr-xr-x.?2?root?root?4096?Jun?29?02:38?lib drwxr-xr-x.?2?root?root?4096?Jun?29?02:38?lib32 drwxr-xr-x.?2?root?root?4096?Jun?29?02:38?sbin [[email?protected]?~]#?ll?mkdirtest total?24 drwxr-xr-x.?2?root?root?4096?Jun?29?02:38?bin drwxr-xr-x.?4?root?root?4096?Jun?29?02:38?config drwxr-xr-x.?4?root?root?4096?Jun?29?02:38?info drwxr-xr-x.?2?root?root?4096?Jun?29?02:38?lib drwxr-xr-x.?2?root?root?4096?Jun?29?02:38?lib32 drwxr-xr-x.?2?root?root?4096?Jun?29?02:38?sbin
目標目錄已存在時
[[email?protected]?~]#?mkdir?mkdirtest3 [[email?protected]?~]#?ll?mkdirtest3 total?0 [[email?protected]?~]#?cp?-a?mkdirtest?mkdirtest3 [[email?protected]?~]#?ll?mkdirtest3 total?4 drwxr-xr-x.?8?root?root?4096?Jun?29?02:38?mkdirtest [[email?protected]?~]#
說明:在復制目錄時,當目標目錄不存在時,復制時會先創建目標目錄,然后將源目錄內的內容復制到目標目錄;當目標目錄存在時,會直接將源目錄復制到已存在的目標目錄下。