我想创建一个shell脚本,它遍历文件夹并删除与[versionnumber-n]匹配的文件夹,其中n> 0
版本号位于文件中,内容如下:
MAVEN_VERSION=1.2.7.0-SNAPSHOT
以下是一个例子:
文件列表就像
drwxrwxr-x 4 jenkins jenkins 4096 Jul 29 10:54 ./
drwxrwxr-x 20 jenkins jenkins 4096 Jul 4 09:20 ../
drwxr-xr-x 2 jenkins jenkins 4096 Jul 23 12:35 1.2.6.0-SNAPSHOT/
drwxr-xr-x 2 jenkins jenkins 4096 Jul 28 23:13 1.2.7.0-SNAPSHOT/
-rw-rw-r-- 1 jenkins jenkins 403 Jul 29 10:11 maven-metadata-local.xml
-rw-r--r-- 1 jenkins jenkins 403 Jul 28 23:13 maven-metadata-mtx-snapshots.xml
-rw-r--r-- 1 jenkins jenkins 40 Jul 28 23:13 maven-metadata-mtx-snapshots.xml.sha1
-rw-r--r-- 1 jenkins jenkins 403 Jul 28 23:13 maven-metadata.xml
-rw-r--r-- 1 jenkins jenkins 32 Jul 28 23:13 maven-metadata.xml.md5
-rw-r--r-- 1 jenkins jenkins 40 Jul 28 23:13 maven-metadata.xml.sha1
-rw-r--r-- 1 jenkins jenkins 186 Jul 28 23:13 resolver-status.properties
我希望脚本删除文件夹1.2.6.0-SNAPSHOT /但不是1.2.7.0-SNAPSHOT /。如果有像1.2.5.0-SNAPSHOT / 1.2.4.0-SNAPSHOT /那样的文件夹那么。
我现在所拥有的是:
.*(?!1.2.7.0)(-SNAPSHOT)
不幸的是,这两个文件夹都匹配(在上面的示例中)
编辑:过早点击提交...
答案 0 :(得分:1)
使用Bash,你可以使用带有扩展路径名扩展的否定。
shopt -s extglob
rm -fr /dir/1.2.!(7).0-SNAPSHOT
干运行示例:
$ ls -1
1.2.10.0-SNAPSHOT
1.2.5.0-SNAPSHOT
1.2.6.0-SNAPSHOT
1.2.7.0-SNAPSHOT
a
$ echo rm -fr 1.2.!(7).0-SNAPSHOT
rm -fr 1.2.10.0-SNAPSHOT 1.2.5.0-SNAPSHOT 1.2.6.0-SNAPSHOT
答案 1 :(得分:0)
我最终是如何做到的:
if [ -z "$MAVEN_VERSION_SERVER" ]
then
echo "\$MAVEN_VERSION_SERVER NOT set! \n exiting ..."
else
find /var/lib/jenkins/.m2/repository/de/db/mtxbes -mindepth 1 -type d -regex '.*SNAPSHOT' -not -name $MAVEN_VERSION_SERVER | xargs -d '\n' rm -fr
fi
($ MAVEN_VERSION_SERVER之前设置并使用groovy脚本读取)