>我有一个问题。我在/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
谢谢你们。
对不起,我的英语很差。
您只想遍历扩展名为 .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/
。
通配符仅列出以 .war 结尾的文件,然后使用 ${variable%.*}
进行参数扩展,以删除最短的匹配后缀(即删除最后一个句点的所有内容并返回剩余的内容)
for entry in /root/tmp/despligue/webapps/*.war; do [[ -f $entry && -d "${entry%.*}" ]] && rm -rf "${entry%.*}"; done
请注意,上述还检查:
- 该
$entry
是常规文件(不是符号链接或目录); - 该
${entry%.*}
在尝试删除它之前是一个有效的目录。