首先建立一個用於測試的目錄,用'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文件;或復制其他項目中特定類型的源文件