Regex 匹配[number-n]-字但不匹配[number]-字的正则表达式
我想创建一个shell脚本,它遍历文件夹并删除与[versionnumber-n]匹配的文件夹,其中n>0 版本号位于一个文件中,该文件的内容如下:Regex 匹配[number-n]-字但不匹配[number]-字的正则表达式,regex,linux,shell,Regex,Linux,Shell,我想创建一个shell脚本,它遍历文件夹并删除与[versionnumber-n]匹配的文件夹,其中n>0 版本号位于一个文件中,该文件的内容如下: MAVEN_VERSION=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-SNAPS
MAVEN_VERSION=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
文件列表如下所示
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)
不幸的是,它与两个文件夹都匹配(在上面的示例中)
编辑:点击submit太早了…使用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
请参见和。我最后是如何做到的:
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
(之前使用groovy脚本设置并读取$MAVEN_VERSION_服务器)请显示这些文件夹的示例列表。并展示你是如何列出它们的。我只是无意中点击了提交。。。抱歉是否要删除除1.2.7.0版本之外的所有内容?谢谢您的回答。问题是,数字会随着时间的推移而变化。我把它写在一个文件中,我想从中读取它并删除所有小于该数字的文件夹。这应该放在一个定期运行的脚本中。@MichaelNiemand您可以使用version sort和sed来显示除最新版本以外的所有版本:
ls-1 | sort-V | sed'$d'
当然find
也适用于此,不仅仅是ls
,而是您得到了这个概念。如果您需要帮助来明智地删除这些文件,尽管文件名上有空格,请根据它对您的解决方案进行评论,我会给出建议。对我来说,最安全的方法是使用xargs
:find-type d-regex.*SNAPSHOT'| sort-V | sed'$d'.\n'rm fr
您可以尝试find-type d-regex.*SNAPSHOT'-not name“1.2.7.0-SNAPSHOT”
。