获取除这些目录之外的所有文件结构

获取除这些目录之外的所有文件结构

我想复制整个文件结构(包含数千个文件和数百个目录),它是一个目录层次结构,并且有那些节点模块我想从复制过程中排除的目录。

是否有一个 Unix 命令可以递归地从目录及其所有文件和子目录复制,并带有一个选项,表示不包含名为 的目录<name>

就像是 :

cp root/ rootCopy/ --except node_modules

如果没有,是否有一种简单的方法可以从命令行执行此操作,而无需编写 bash 或其他内容?

答案1

您可以尝试使用rsynctar命令。

或者邮政。

rsync手册页

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

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

答案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实现真正目标的全新结构

相关内容