我想复制整个文件结构(包含数千个文件和数百个目录),它是一个目录层次结构,并且有那些节点模块我想从复制过程中排除的目录。
是否有一个 Unix 命令可以递归地从目录及其所有文件和子目录复制,并带有一个选项,表示不包含名为 的目录<name>
?
就像是 :
cp root/ rootCopy/ --except node_modules
?
如果没有,是否有一种简单的方法可以从命令行执行此操作,而无需编写 bash 或其他内容?
答案1
答案2
令人毛骨悚然的方法,但它对我有用:
(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
实现真正目标的全新结构