У меня есть список папок, что у всех есть год в круглых скобках, за исключением некоторых:
./Folder 1 (2001)
./Folder 2 (2008)
./Folder 3
./Folder 4 (1994)
./Folder 5 (2005)
./Folder 6
Я хотел бы удалить папки (и содержание там), которые не имеют круглых скобок на их имя через командную строку. В вышеупомянутом примере, Folder 3
и Folder 6
.
Я знаю что, если я хотел удалить все папки, которые действительно имеют круглые скобки в их заголовке, который я мог сделать:
rm -rf *(*
Но я не знаю, как сделать это наоборот.
С помощью расширенного сглаживания bash (который должен быть включен по умолчанию в Ubuntu)
$ shopt extglob
extglob on
можно использовать шаблон глобуса !(*\(*\)*)
, например. учитывая
$ 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
В ударе используйте GLOBIGNORE
:
$ echo *
Folder 1 (2001) Folder 2 (2008) Folder 3 Folder 4 (1994) Folder 5 (2005) Folder 6
$ GLOBIGNORE='*\(*'
$ echo *
Folder 3 Folder 6