复制带扩展名的文件并按文件名排除

时间:2018-04-03 19:05:47

标签: linux bash robocopy cp

我正在尝试将以下robocopy命令移植到Linux:

robocopy SrcDir DstDir *.dll *.pdb *.xml /xf Unity*.* nunit*.*

换句话说,我想:

  • 包括所有dllpdbxml个文件
  • 除非,否则以Unitynunit
  • 开头

我已经阅读了以下两个线程,但无法确定确切的语法:

到目前为止,我最好的猜测是:

  • 启用shopt -s extglob
  • 转到源目录cd SrcDir
  • 使用此命令:cp ((*.dll | *.pdb | *.xml) && !(Unity*.* | nunit*.*)) DstDir

但是我的条件表达式中出现语法错误,从*.dll开始。

2 个答案:

答案 0 :(得分:2)

您可以使用extglob

来使用此命令
shopt -s extglob nullglob dotglob
cd "$srcDir"

cp !(@(Unity|nunit)).{dll,pdp,xml} "$dstDir"

答案 1 :(得分:0)

根据以下链接:

BASH copy all files except one

您可以使用以下命令:

find [YOUR_SOURCE_ADDRESS] \( -iname \*.dll -o -iname \*.pdb -o -iname \*.xml \) ! \(-name "Unity*" -o -name "nunit*" \) -exec cp -t [YOUR_DEST_ADDRESS] {} +

您可以更改[YOUR_SOURCE_ADDRESS]和[YOUR_DEST_ADDRESS](使用您的搜索地址和目的地地址进行复制)