如何从某个目录中删除除该目录的子目录之外的所有文件?

如何从某个目录中删除除该目录的子目录之外的所有文件?

我正在使用 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在可用时使用。

相关内容