bash - 删除除一个(或多个)以外的所有文件夹
问题描述
我有以下步骤应该删除所有文件夹,除了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)
解决方案
除非您在 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
请记得提前做好文件夹备份,以免文件意外丢失。
推荐阅读
- javascript - childNode.remove() 似乎不起作用
- python - 更改 QStackedWidget 索引的问题
- python - 如何从用户输入替换列表中的某个字符串?
- python - 为什么我的 Python 代码从 Microsoft Dynamics 365 CRM API 获得 401 访问被拒绝?
- math - 使用 GPS 识别物体是向前还是向后
- javascript - 从 svg 创建图像不起作用
- javascript - PHP 到 JavaScript 确认消息框变量未定义(但有值)?
- python - AssertionError:在 Pytorch 的 AutomaticMixedPrecision 中没有记录此优化器的 inf 检查
- sql - 当数字为负时,累积计算未正确完成
- regex - 无效的后视模式