why is
rm -rf rev[1-9]
not considering double digits?
Por que deveria? Você especificou apenas um dígito. A expressão de colchete [..]
corresponde exatamente a um caractere, que deve ser um dos listados dentro dos colchetes. Portanto, rev[1-9]
corresponde a nomes de arquivos do formato revN
, em que N
é algum dígito (exceto 0
). Da mesma forma, rev[1-11]
corresponde exatamente a rev1
, pois 1
é o único caractere especificado entre colchetes, embora seja especificado várias vezes. É o mesmo que rev[1]
ou rev1
. Da mesma forma, rev[1-12]
seria o mesmo que rev[12]
.
Você pode usar rev[0-9]*
para corresponder a todos os nomes de arquivos que começam com rev
, um dígito e, em seguida, qualquer coisa, ou usando globos estendidos no Bash e no ksh, rev+([0-9])
. A subexpressão +(...)
corresponde a pelo menos uma repetição do padrão entre parênteses, da mesma forma que (...)+
em expressões regulares.
Expansão de contraventamento{a..b}
geraria cadeias de caracteres, não corresponderá a nomes de ficheiros, pelo que poderá utilizar rev{1..12}
para gerar rev1
, rev2
, ... rev12
. Isso não leva em conta se os arquivos existem, portanto também geraria rev1
, o que não existe no seu exemplo.
A julgar pela edição, você deseja corresponder (e rm
) todos os arquivos correspondentes a rev*
, exceto rev11
? A maneira mais fácil é provavelmente renomear a exceção temporariamente (assumindo que arev11
não existe):
$ mv rev11 arev11
$ rm -r rev*
$ mv arev11 rev11
Você pode usar a expansão de chaves ...
$ rm -r rev{{1..10},12}
(Isso dará erros sobre nomes inexistentes se você definir o limite superior muito alto.)
Criar um glob que combine com números diferentes de 11 é um pouco mais complicado, possivelmente algo assim, mas é melhor verificar primeiro:
$ echo rm -r rev[0-9] rev1[02-9] rev[2-9][0-9]