首页 > 解决方案 > 删除除一个(或多个)以外的所有文件夹

问题描述

我有以下步骤应该删除所有文件夹,除了foobar

node {
    stage('Clean') {
        sh "rm -rf ${WORKSPACE}/path/to/folder/!\\(foobar\\)"
    }
}

它生成以下命令:

rm -rf '/path/to/workspace/path/to/folder/!(foobar)

它什么也不做。但是,如果我在我的终端(Jenkins 外部)中键入命令,而路径周围没有简单的引号,它就可以工作。

为什么 Jenkins 会生成简单的引号?如何删除它们以使命令起作用?

(我在 OSX 上运行 Jenkins)

标签: bashjenkinsshjenkins-pipeline

解决方案


除非您在 bash 中设置,否则类型 glob!(name)不起作用。shopt -s extglob

请试试:

bash -O extglob -c "rm -rf /path/to/workspace/path/to/folder/!(foobar)"

作为替代方案,您也可以说:

find /path/to/workspace/path/to/folder -type d -mindepth 1 ! -name "foobar" -print0 | xargs -0 rm -rf

请记得提前做好文件夹备份,以免文件意外丢失。


推荐阅读