如何编写Bash脚本仅删除无*.jar文件目录下的*.pom文件
解决方案
修改后可直接使用的脚本
#!/bin/sh sudo find /var/opt/jfrog/artifactory/2021*/repositories/ -type f -name "*.pom" -exec sh -c ' for pomfile do pomdir=$(dirname "$pomfile") # 仅当目录下不存在.jar文件时才删除对应.pom if ! ls "$pomdir"/*.jar >/dev/null 2>&1; then rm -f "$pomfile" fi done ' find-sh {} +
逻辑说明
- 先通过
find命令递归扫描指定路径下所有后缀为.pom的文件 - 对每个匹配到的.pom文件,提取其所在的父目录
- 校验该父目录下是否存在后缀为
.jar的文件,仅当无.jar文件时才删除对应的.pom文件 - 脚本兼容含特殊字符的文件名/路径,不会出现误判
测试验证建议
正式执行删除前建议先运行测试脚本,确认待删除的文件列表符合预期,避免误删数据:
sudo find /var/opt/jfrog/artifactory/2021*/repositories/ -type f -name "*.pom" -exec sh -c ' for pomfile do pomdir=$(dirname "$pomfile") if ! ls "$pomdir"/*.jar >/dev/null 2>&1; then echo "待删除文件: $pomfile" fi done ' find-sh {} +
确认输出的文件列表无误后,再把测试脚本中的echo "待删除文件: $pomfile"替换为rm -f "$pomfile"即可。
内容的提问来源于stack exchange,提问作者user2995458
相关产品推荐
相关产品推荐

