Bash
如何從某個目錄中刪除除該目錄的子目錄之外的所有文件?
我正在使用 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
在可用時使用。