如果file在先前目录中,则删除具有相同名称的文件而没有扩展名的其他目录

时间:2014-02-13 01:51:32

标签: bash shell unix for-loop

我有问题。我在/ 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

谢谢你们。

抱歉我的英语很差。

2 个答案:

答案 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}}是一个有效目录。