为什么zsh的行为不同于rm !(exeption_file)



我想删除文件夹Dowloads中除了文件夹no的所有文件。所以我在zsh中创建文件:

➜  Downloads touch abc.txt 1 2 3 4321 4 9; mkdir a b c no 
➜  Downloads ls
1  2  3  4  4321  9  a  abc.txt  b  c  no

然后我尝试删除当前文件夹中的所有文件夹和文件,除了文件夹no(而在zsh):

➜  Downloads rm -rf -v !(no)
zsh: unknown sort specifier

然后切换到bash并尝试相同的命令:

➜  Downloads bash
vladyslav@kdeneonlinux:~/Downloads$ rm -rf -v !(no)
removed '1'
removed '2'
removed '3'
removed '4'
removed '4321'
removed '9'
removed directory 'a'
removed 'abc.txt'
removed directory 'b'
removed directory 'c'
vladyslav@kdeneonlinux:~/Downloads$ ls
no
vladyslav@kdeneonlinux:~/Downloads$ exit
exit
➜  Downloads ls
no
➜  Downloads 

所以,在bash中,它做了我希望它在zsh中做的事情。为什么zsh显示

zsh: unknown sort specifier

?

如何修复rm !(stuff)工作在zshbash?

在zsh中,您可以使用

setopt extendedglob
rm *~no

最新更新