Linux:删除文件*..但不删除文件1和文件2

Linux:删除文件*..但不删除文件1和文件2

通常我在 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 {} +

它不太像使用通配符,因为它只过滤常规文件。

相关内容