我有一个文件夹列表,除少数文件夹外,所有文件夹均在括号中标有年份:
./Folder 1 (2001)
./Folder 2 (2008)
./Folder 3
./Folder 4 (1994)
./Folder 5 (2005)
./Folder 6
我想删除以下文件夹(及其内容):没有括号通过命令行以它们的名称添加 。在上面的例子中,Folder 3
和Folder 6
。
我知道如果我想删除所有文件夹有括号在他们的标题中我可以这样做:
rm -rf *(*
但我不知道反过来该怎么做。
答案1
使用 bash 的扩展通配符(在 Ubuntu 中应该默认启用)
$ shopt extglob
extglob on
应该可以使用 glob 模式!(*\(*\)*)
例如
$ tree
.
├── Folder 1 (2001)
├── Folder 2 (2008)
├── Folder 3
├── Folder 4 (1994)
├── Folder 5 (2005)
└── Folder 6
6 directories, 0 files
然后
$ rm -ri !(*\(*\)*)
rm: remove directory 'Folder 3'? y
rm: remove directory 'Folder 6'? y
离开
$ tree
.
├── Folder 1 (2001)
├── Folder 2 (2008)
├── Folder 4 (1994)
└── Folder 5 (2005)
4 directories, 0 files
答案2
在 Bash 中,使用GLOBIGNORE
:
$ echo *
Folder 1 (2001) Folder 2 (2008) Folder 3 Folder 4 (1994) Folder 5 (2005) Folder 6
$ GLOBIGNORE='*\(*'
$ echo *
Folder 3 Folder 6