天天看點

linux複制指定目錄下的全部檔案到另一個目錄中

linux複制指定目錄下的全部檔案到另一個目錄中

複制指定目錄下的全部檔案到另一個目錄中

檔案及目錄的複制是經常要用到的。linux下進行複制的指令為cp。

假設複制源目錄 為 dir1 ,目标目錄為dir2。怎樣才能将dir1下所有檔案複制到dir2下了

如果dir2目錄不存在,則可以直接使用

cp -r dir1 dir2

即可。

如果dir2目錄已存在,則需要使用

cp -r dir1/. dir2

如果這時使用cp -r dir1 dir2,則也會将dir1目錄複制到dir2中,明顯不符合要求。

ps:dir1、dir2改成對應的目錄路徑即可。

cp -r /home/www/xxx/statics/. /home/www/statics

如果存在檔案需要先删除

rm -rf /home/www/statics/*

否則會一個個檔案提示你确認,使用cp -rf 也一樣提示

--------------------------------------

copy指令的功能是将給出的檔案或目錄拷貝到另一檔案或目錄中,同MSDOS下的copy指令一樣,功能十分強大。

文法: cp [選項] 源檔案或目錄 目标檔案或目錄

說明:該指令把指定的源檔案複制到目标檔案或把多個源檔案複制到目标目錄中。

該指令的各選項含義如下:

- a 該選項通常在拷貝目錄時使用。它保留連結、檔案屬性,并遞歸地拷貝目錄,其作用等于dpR選項的組合。

- d 拷貝時保留連結。

- f 删除已經存在的目标檔案而不提示。

- i 和f選項相反,在覆寫目标檔案之前将給出提示要求使用者确認。回答y時目标檔案将被覆寫,是互動式拷貝。

- p 此時cp除複制源檔案的内容外,還将把其修改時間和通路權限也複制到新檔案中。

- r 若給出的源檔案是一目錄檔案,此時cp将遞歸複制該目錄下所有的子目錄和檔案。此時目标檔案必須為一個目錄名。

- l 不作拷貝,隻是連結檔案。

需要說明的是,為防止使用者在不經意的情況下用cp指令破壞另一個檔案,如使用者指定的目标檔案名已存在,用cp指令拷貝檔案後,這個檔案就會被新源檔案覆寫,是以,建議使用者在使用cp指令拷貝檔案時,最好使用i選項。

例1

例2

複制指定檔案到指定檔案夾

首先建立一個用于測試的目錄,用'tree'指令檢視

可見,目錄中主要包含用于測試的*.txt檔案和用于充當炮灰的*。tes檔案

目标是保持目前的目錄結構,隻把txt檔案複制出來

方法一:當不需要的檔案類型較為單一時,可以通過完全複制然後删除指定類型的檔案完成

Step1 使用指令 cp -r test/ test2 将測試目錄test下所有内容完全複制到test2

Step2 組合使用find及xargs,将*.tes檔案删除

xargs是給指令傳遞參數的一個過濾器,可以将前一個指令産生的輸出作為後一個指令的參數

指令find test2/ -name '*.tes' |xargs rm -rf, 即将find産生的輸出(test2目錄下的所有tes檔案),作為rm的參數,進而完全删除

适用場景舉例:把項目檔案備份,要去除其中的.svn檔案,可以采用這種方式

方法二:需要的檔案為單一類型,帶目錄結構複制

這種情況下可以使用tar指令将指定類型的檔案打包,然後解包,同樣需要組合使用find和xargs

Step1 建立目錄test3

mkdir test3

Step2 将指定類型檔案帶目錄結構打包

find test/ -name '*.txt' |xargs tar czf test3.tgz

Step3 解包到目錄test3

tar zxvf test3.tgz -C test3

适用場景:較為普遍,例如可以複制某個Web項目的所有html/jsp/php檔案;或複制其他項目中特定類型的源檔案

     本文轉自yzy121403725 51CTO部落格,原文連結:http://blog.51cto.com/lookingdream/1896382,如需轉載請自行聯系原作者