如何删除除顶级数字目录之外的所有内容?

kjo*_*kjo 4 zsh find wildcards

我想删除某个目录下的所有内容/path/to/foo,除了那些与元模式匹配的子目录

/path/to/foo/<DIGITS>/
Run Code Online (Sandbox Code Playgroud)

例如,如果下面的内容/path/to/foo最初是这样的:

/path/to/foo
??? 0/
?   ??? a
?   ??? b
??? 232532/
??? 42
??? 73/
?   ??? d
?   ??? e
??? 8xyz/
?   ??? i
?   ??? j
??? _bar/
?   ??? x
?   ??? y
?   ??? z
??? .baz/
?   ??? f
?   ??? frobozz/
?       ??? g
?       ??? h
??? quux/
    ??? 123/
Run Code Online (Sandbox Code Playgroud)

...我想结束

/path/to/foo
??? 0/
?   ??? a
?   ??? b
??? 232532/
??? 73/
    ??? d
    ??? e
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个find ... -delete基于 - 的咒语,或者一个合适的zshglob 模式(for rm -r),可以做到这一点。我正在使用 Linux。

Sté*_*las 5

zsh

set -o extendedglob # best in ~/.zshrc
rm -rf /path/to/foo/^<->(D) /path/to/foo/<->(^-/)
Run Code Online (Sandbox Code Playgroud)
  • ^something不是(类似ksh!(something)
  • <-><x-y>匹配来自xto 的十进制整数y,但没有提供任何边界(因此匹配任何十进制数字序列,类似于ksh's +([0-9]))。
  • (D)包含隐藏文件(Dot 文件)的 glob 限定符
  • (^-/)glob 限定符仅表示符号链接解析后不是目录类型的文件-如果您还想删除目录的符号链接,请删除)。