Удалите папки, которые не имеют символа на их имя

У меня есть список папок, что у всех есть год в круглых скобках, за исключением некоторых:

./Folder 1 (2001)
./Folder 2 (2008)
./Folder 3
./Folder 4 (1994)
./Folder 5 (2005)
./Folder 6

Я хотел бы удалить папки (и содержание там), которые не имеют круглых скобок на их имя через командную строку. В вышеупомянутом примере, Folder 3 и Folder 6.

Я знаю что, если я хотел удалить все папки, которые действительно имеют круглые скобки в их заголовке, который я мог сделать:

rm -rf *(*

Но я не знаю, как сделать это наоборот.

0
задан 6 March 2017 в 13:27

2 ответа

С помощью расширенного сглаживания 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
1
ответ дан 3 November 2019 в 16:16

В ударе используйте GLOBIGNORE:

$ echo *
Folder  1 (2001) Folder  2 (2008) Folder  3 Folder  4 (1994) Folder  5 (2005) Folder  6
$ GLOBIGNORE='*\(*'
$ echo *
Folder  3 Folder  6
0
ответ дан 3 November 2019 в 16:16

Другие вопросы по тегам:

Похожие вопросы: