通常我在 bash 上这样做
shopt -s extglob
rm !(filedontwantremove)
并删除除 filedontwantwantremove 之外的所有文件
但是,如果我想删除除 filedontwantwantremove 和“antotherfilewithatotal differentname”之外的所有文件?
有一个找到的解决方案,但我更喜欢像 rm !()
答案1
只需使用:
shopt -s extglob
rm !(filedontwantremove|antotherfilewithatotaldifferentname)
但请注意,extglob 通常在 bash 的交互式 shell 中默认打开。
执行以下操作来查明它是否处于活动状态:
$ shopt -p extglob
shopt -s extglob ### The -s means that it is set.
并执行此命令来查找手册中解释!(pattern-list)
习惯用法的部分:
$ LESS=+/'If the extglob shell option is enabled' man bash
... A模式列表是由 | 分隔的一个或多个模式的列表。
答案2
是的,有一个find
解决方案,它是 POSIX 方式:
find . ! -name . -prune -type f ! -name 'file[12]' -exec rm {} +
它不太像使用通配符,因为它只过滤常规文件。