我正在使用 bash shell。我有这个命令来删除特定目录中的所有 JAR 文件
find ~/.jenkins/jobs/subco/ -name '*.jar' -print0 | xargs -0 -r rm
但是,我想修改上面的内容,以便它将删除除“~/.jenkins/jobs/subco/myapp”中的 JAR 文件之外的所有 JAR 文件。如何修改上述命令以排除从该特定目录中删除 JAR 文件,同时从所有其他目录中删除?
答案1
使用-prune
选项跳过该目录
find ~/.jenkins/jobs/subco -path ~/.jenkins/jobs/subco/myapp -prune -o -name '*.jar' -exec rm -r {} +
答案2
尝试:
(
cd ~/.jenkins/jobs/subco
find . -path ./myapp -prune -o -type f -name '*.jar' -print0 | ...
)
添加-type f
以限制条件,因为当您只想匹配 JAR 文件时。而且,您使用过-print0
,很可能您find
支持-delete
,因此您可以使用:
(
cd ~/.jenkins/jobs/subco
find . -path ./myapp -prune -o -type f -name '*.jar' -delete
)
POSIXly:
(
cd ~/.jenkins/jobs/subco
find . -path ./myapp -prune -o -type f -name '*.jar' -exec rm -f {} +
)
通过 GNU find,您可以使用-execdir
来避免-exec
竞争条件,另请参阅一些GNU 查找手册中的安全考虑。
您应该始终-delete
在可用时使用。