Bash

如何從某個目錄中刪除除該目錄的子目錄之外的所有文件?

  • May 4, 2016

我正在使用 bash shell。我有這個命令可以刪除特定目錄中的所有 JAR 文件

find ~/.jenkins/jobs/subco/ -name '*.jar' -print0 | xargs -0 -r rm

但是,我想修改上面的內容,以便刪除所有 JAR 文件,除了“~/.jenkins/jobs/subco/myapp”中的文件。如何修改上述命令以排除從該特定目錄中刪除 JAR 文件,同時從所有其他目錄中刪除?

使用-prune選項跳過該目錄

find ~/.jenkins/jobs/subco -path ~/.jenkins/jobs/subco/myapp -prune -o -name '*.jar' -exec rm -r {} +

嘗試:

(
 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 find 手冊中的一些安全注意事項

您應該始終-delete在可用時使用。

引用自:https://unix.stackexchange.com/questions/281087