Cp

取除這些目錄之外的所有文件結構

  • June 22, 2017

我想複製整個文件結構(包含數千個文件和數百個目錄),它是一個目錄層次結構,並且我想從復製過程中排除那些node_modules目錄。

是否有一個 Unix 命令可以遞歸地從目錄及其所有文件和子目錄複製,並帶有一個選項說不包含名稱為的目錄<name>

就像是 :

cp root/ rootCopy/ --except node_modules

?

如果沒有,是否有一種簡單的方法可以從命令行執行此操作而無需編寫 bash 或其他東西?

您可以嘗試使用rsynctar命令。

請參閱文章。

rsync手冊頁

   --exclude=PATTERN       exclude files matching PATTERN
   --exclude-from=FILE     read exclude patterns from FILE

rsync -avz --exclude 'dir*' source/ destination/

令人毛骨悚然的方法,但它對我有用:

(find source|egrep -v "node_modules|^source/exact/node_plugin" && echo tmptarget)|xargs cp --parents
mv tmptarget/source target

必要時進行說明。cp像這樣工作:

cp source1 source2 ... sourceN target
  • 所以find列印你的整個結構。
  • 用於egrep排除所有不需要的分支。確保你已經正確地形成了你的圖案。^如果您想排除確切的分支,或者只是node_modules想排除所有分支,請使用和完整路徑。
  • echo使用命令列印出目標文件夾。
  • xargs所有這些行來cp為你發號施令
  • --parents需要創建父文件夾,因為我們不能-r在這裡使用選項,因為它會弄亂目標文件夾上的所有內容。
  • 最後mv是真正目標的全新結構

引用自:https://unix.stackexchange.com/questions/333709