將源文件或目錄復制到目標文件或目錄中
cp命令 用來將一個或多個源文件或者目錄復制到指定的目的文件或目錄。它可以將單個源文件復制成一個指定文件名的具體的文件或一個已經存在的目錄下。cp命令還支持同時復制多個文件,當一次復制多個文件時,目標文件參數必須是一個已經存在的目錄,否則將出現錯誤。
cp(選項)(參數)
-a:此參數的效果和同時指定"-dpR"參數相同;
-d:當復制符號連接時,把目標文件或目錄也建立為符號連接,并指向與源文件或目錄連接的原始文件或目錄;
-f:強行復制文件或目錄,不論目標文件或目錄是否已存在;
-i:覆蓋既有文件之前先詢問用戶;
-l:對源文件建立硬連接,而非復制文件;
-p:保留源文件或目錄的屬性;
-R/r:遞歸處理,將指定目錄下的所有文件與子目錄一并處理;
-s:對源文件建立符號連接,而非復制文件;
-u:使用這項參數后只會在源文件的更改時間較目標文件更新時或是名稱相互對應的目標文件并不存在時,才復制文件;
-S:在備份文件時,用指定的后綴“SUFFIX”代替文件的默認后綴;
-b:覆蓋已存在的文件目標前將目標文件備份;
-v:詳細顯示命令執行的操作。
-R
選項;下面的第一行中是 cp 命令和具體的參數(-r 是“遞歸”, -u 是“更新”,-v 是“詳細”)。接下來的三行顯示被復制文件的信息,最后一行顯示命令行提示符。這樣,只拷貝新的文件到我的存儲設備上,我就使用 cp 的“更新”和“詳細”選項。
通常來說,參數 -r
也可用更詳細的風格 --recursive
。但是以簡短的方式,也可以這么連用 -ruv
。
cp -r -u -v /usr/men/tmp ~/men/tmp
版本備份 --backup=numbered
參數意思為“我要做個備份,而且是帶編號的連續備份”。所以一個備份就是 1 號,第二個就是 2 號,等等。
$ cp --force --backup=numbered test1.py test1.py
$ ls
test1.py test1.py.~1~ test1.py.~2~
如果把一個文件復制到一個目標文件中,而目標文件已經存在,那么,該目標文件的內容將被破壞。此命令中所有參數既可以是絕對路徑名,也可以是相對路徑名。通常會用到點.
或點點..
的形式。例如,下面的命令將指定文件復制到當前目錄下:
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、傳遞了目錄屬性、沒有略過目錄。
遞歸強制復制目錄到指定目錄中覆蓋已存在文件
cp -rfb ./* ../backup
# 將當前目錄下所有文件,復制到當前目錄的兄弟目錄 backup 文件夾中
拷貝目錄下的隱藏文件如 .babelrc
cp -r aaa/.* ./bbb
# 將 aaa 目錄下的,所有`.`開頭的文件,復制到 bbb 目錄中。
cp -a aaa ./bbb/
# 記住后面目錄最好的'/' 帶上 `-a` 參數
復制到當前目錄
cp aaa.conf ./
# 將 aaa.conf 復制到當前目錄