我有问题。我在/ root / tmp / despliegue / webapps中有扩展名.war的文件,我想删除/ usr / share / tomcat6 / webapps中没有扩展名的同名目录
我已经在没有后缀的情况下使用了:
for entry in /root/tmp/despliegue/webapps/* ; do basename $entry .war ; done
我需要删除输出上一个循环...像这样的人。
for entry in /root/tmp/despligue/webapps/* ; do rm -rf /usr/share/tomcat6/webapps`basename $entry .war`; done
谢谢你们。
抱歉我的英语很差。
答案 0 :(得分:1)
您只想循环使用.war扩展名的文件,因此您应该使用*.war
代替*
:
for entry in /root/tmp/despligue/webapps/*.war; do
rm -rf "/usr/share/tomcat6/$(basename "$entry" .war)"
done
您的问题是您在/root/tmp/despliegue/
中有.war文件,但您的代码表明它们存储在/root/tmp/despliegue/webapps/
中。此外,问题表明目录位于/usr/share/tomcat6/webapps/
,但您的代码使用/usr/share/tomcat6/
。
答案 1 :(得分:0)
您可以使用bash通配符全局列出仅以.war结尾的文件,然后使用${variable%.*}
进行参数扩展,删除最短的匹配后缀(即删除上一个句点中的所有内容并返回剩下的内容)
for entry in /root/tmp/despligue/webapps/*.war; do [[ -f $entry && -d "${entry%.*}" ]] && rm -rf "${entry%.*}"; done
注意,以上也检查:
$entry
是常规文件(不是符号链接或目录);和${entry%.*}
之前,{{1}}是一个有效目录。