Cp
取除這些目錄之外的所有文件結構
我想複製整個文件結構(包含數千個文件和數百個目錄),它是一個目錄層次結構,並且我想從復製過程中排除那些node_modules目錄。
是否有一個 Unix 命令可以遞歸地從目錄及其所有文件和子目錄複製,並帶有一個選項說不包含名稱為的目錄
<name>
?就像是 :
cp root/ rootCopy/ --except node_modules
?
如果沒有,是否有一種簡單的方法可以從命令行執行此操作而無需編寫 bash 或其他東西?
您可以嘗試使用
rsync
或tar
命令。--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
是真正目標的全新結構