cp命令用於文件及目錄的複製,是linux經常使用的命令之一,通常狀況下,shell會設置一個別名alias cp='cp -i',在命令行下複製文件時,若是目標文件已經存在,就會詢問是否覆蓋,無論你是否使用-i參數。可是若是是在shell腳本中執行cp時,沒有-i參數時不會詢問是否覆蓋。這說明命令行和shell腳本的執行方式有些不一樣。 linux
1.命令格式: shell
cp [OPTION]... [-T] SOURCE DESTbash
cp [OPTION]... SOURCE... DIRECTORYide
cp [OPTION]... -t DIRECTORY SOURCE...spa
2.命令參數:命令行
cp [-aifpru] [源文件][目標文件]遞歸
-a:至關於-pdrit
-d:若源文件爲連接文件(like file),則複製連接文件屬性而非檔案自己class
-f:強制,若目標檔案已經存在且沒法開啓,則移除後在嘗試test
-i:若目標文件已經存在,在覆蓋時會先詢問;
-p:連同檔案的屬性一塊兒複製過來,而非使用默認屬性
-r:遞歸,用於複製目錄
-u:若目標文件存在。則目標文件比源文件舊時才複製;
3.命令實例:
1.複製單個文件到目標目錄,文件在目標目錄中不存在。
[root@oldboylinux ~]# cp a.txt backup/ [root@oldboylinux ~]# ll a.txt -rw-r--r--. 1 root root 4 Jun 30 14:56 a.txt [root@oldboylinux ~]# ll backup/ total 4 -rw-r--r--. 1 root root 4 Jul 4 22:07 a.txt [root@oldboylinux ~]#
說明:會發現兩個文件的時間戳是不同的,若是想要目標文件和源文件屬性同樣,可使用-a選項
2.複製單個文件到目標目錄,文件在目標目錄中已存在,複製後的文件與源文件屬性同樣。
[root@oldboylinux ~]# ll a.txt -rw-r--r--. 1 root root 4 Jun 30 14:56 a.txt [root@oldboylinux ~]# cp -a a.txt backup/ cp: overwrite `backup/a.txt'? y [root@oldboylinux ~]# ll backup/ total 4 -rw-r--r--. 1 root root 4 Jun 30 14:56 a.txt [root@oldboylinux ~]#
說明:cp在複製文件時,若是目標目錄的文件是已存在的,會提示是否覆蓋文件,這是因爲命令行下的cp是有別名的,使用alias | grep "cp"查看cp別名,alias cp='cp -i',-i參數是若目標文件已經存在,在覆蓋時會先詢問;若是不想提示詢問直接覆蓋,能夠cp -n 或者/bin/cp。
3.複製目錄:
目標目錄不存在時
[root@oldboylinux ~]# 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 [root@oldboylinux ~]# cp -a mkdirtest mkdirtest2 [root@oldboylinux ~]# 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 [root@oldboylinux ~]# 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
目標目錄已存在時
[root@oldboylinux ~]# mkdir mkdirtest3 [root@oldboylinux ~]# ll mkdirtest3 total 0 [root@oldboylinux ~]# cp -a mkdirtest mkdirtest3 [root@oldboylinux ~]# ll mkdirtest3 total 4 drwxr-xr-x. 8 root root 4096 Jun 29 02:38 mkdirtest [root@oldboylinux ~]#
說明:在複製目錄時,當目標目錄不存在時,複製時會先建立目標目錄,而後將源目錄內的內容複製到目標目錄;當目標目錄存在時,會直接將源目錄複製到已存在的目標目錄下。