É possível exibir todos os arquivos no diretório atual com um nome de arquivo que não comece com um dígito par seguido por qualquer letra alfabética?

0

Estou tentando responder a esse problema para uma classe COSC que se concentra no Linux / Unix.

Estou usando o Linux com o bash shell. Eu sou novo no Linux a partir de setembro.

Meu instrutor tem essa pergunta nas tarefas desta semana e, com base nas discussões em sala de aula, ela passa de não incluída. Eu realmente gostaria de fazer isso depois de todo o tempo que passei com isso.

O comando que eu criei não leva em conta se um arquivo tem um nome que começa com um dígito par seguido por outro dígito usando curingas. Este é o ponto de discórdia com a questão sendo incluída ou excluída da tarefa e eu me sentei por horas tentando resolver isso.

É possível?

Eu inventei:

echo [!02468][a-zA-Z]*

Todas as sugestões são bem-vindas e muito apreciadas.

    
por Kelly La Morge 23.10.2013 / 21:31

4 respostas

2

Você também pode fazer o seguinte

shopt -s extglob
echo !([02468][a-zA-Z]*)
shopt -u extglob

Você precisa ativar extglob com shopt -s extglob primeiro.
Depois, você pode desativá-lo novamente com shopt -u extglob .

A opção de shell extglob oferece uma correspondência de padrões mais poderosa na linha de comando.

    
por 23.10.2013 / 21:58
0

Eu não acho que seja possível com um simples comando. O seguinte deve fazer o truque:

for i in *; do
  case "$i" in
    [02468][a-zA-Z]*) ;; # do nothing
    *) echo "$i" ;;
  esac
done
    
por 23.10.2013 / 21:41
0

o seguinte deve fazer o truque

echo !([02468][a-zA-Z])
    
por 23.10.2013 / 21:54
0

@ A solução do Rik usando extglob é provavelmente o melhor caminho para bash . Se você precisa de uma maneira agnóstica do shell (supondo que esteja usando o GNU find), tente isto:

find . -type f -not -name "[02468][a-zA-Z]*"
    
por 24.10.2013 / 01:03