Excluir pastas que não têm um caractere em seu nome

0

Eu tenho uma lista de pastas que têm um ano entre parênteses, exceto algumas:

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

Gostaria de excluir as pastas (e o conteúdo delas) que não têm parênteses em seus nomes por meio da linha de comando. No exemplo acima, Folder 3 e Folder 6 .

Se eu quiser excluir todas as pastas que têm parênteses no título, posso fazer isso:

rm -rf *(*

Mas não sei como fazer o contrário.

    
por Moses 06.03.2017 / 21:27

2 respostas

1

Com globbing estendido de globbing (que deve ser ativado por padrão, no Ubuntu)

$ shopt extglob 
extglob         on

deve ser possível usar o padrão glob !(*\(*\)*)

por exemplo. dado

$ tree
.
├── Folder 1 (2001)
├── Folder 2 (2008)
├── Folder 3
├── Folder 4 (1994)
├── Folder 5 (2005)
└── Folder 6

6 directories, 0 files

então

$ rm -ri !(*\(*\)*)
rm: remove directory 'Folder 3'? y
rm: remove directory 'Folder 6'? y

saindo

$ tree
.
├── Folder 1 (2001)
├── Folder 2 (2008)
├── Folder 4 (1994)
└── Folder 5 (2005)

4 directories, 0 files
    
por steeldriver 07.03.2017 / 01:02
0

No bash, use GLOBIGNORE :

$ echo *
Folder  1 (2001) Folder  2 (2008) Folder  3 Folder  4 (1994) Folder  5 (2005) Folder  6
$ GLOBIGNORE='*\(*'
$ echo *
Folder  3 Folder  6
    
por muru 07.03.2017 / 01:21