如果您知道这样的目录不会超过几千个,您可以使用target以下命令设置globstar和dotglobshell 选项bash
shopt -s globstar dotglob
Run Code Online (Sandbox Code Playgroud)
然后使用
rm -rf ./**/target/
Run Code Online (Sandbox Code Playgroud)
这将删除target当前目录中或当前目录下调用的任何目录。末尾的斜杠至关重要,因为否则模式可能会匹配非目录的内容。
该**模式通过设置 shell 选项来启用globstar,并“递归地”向下匹配到子目录。由于dotglob也设置了,这也会找到target隐藏子目录下调用的目录(就像find会做的那样)。
在 macOS 上,默认值 bash太旧,无法支持shell 选项,因此您可能需要使用Homebrewglobstar安装最新版本,或切换到(当前是新 macOS 用户帐户的默认 shell)。bashzsh
使用zsh,您可以使用以下命令执行此操作
rm -rf ./**/target(/D)
Run Code Online (Sandbox Code Playgroud)
其中(/D)表示“仅匹配目录并包括隐藏目录”。glob**在 中默认启用zsh。
和find:
find . -depth -type d -name target -exec rm -rf {} +
Run Code Online (Sandbox Code Playgroud)
这将找到target位于当前目录中或当前目录下的所有目录,然后rm -rf一次调用尽可能多的目录来删除它们。该-depth选项进行find深度优先搜索(我们希望这样做可以避免尝试搜索我们刚刚删除的目录)。
如果您使用shshell(没有**),或者您有数千个这样的目录,则这将是您将使用的命令。
即使您有大量target目录,您仍然应该能够将它们一一删除
for dirpath in ./**/target/; do
rm -rf "$dirpath"
done
Run Code Online (Sandbox Code Playgroud)
尽管这会比使用慢,因为您为每个目录find调用一次。rm
| 归档时间: |
|
| 查看次数: |
6091 次 |
| 最近记录: |