Pular para o conteúdo principal

Questão de Sistemas Operacionais — Scripts em Unix e Linux — FUNDATEC 2023

Sistemas OperacionaisScripts em Unix e Linux
Código
qa543528
Banca
FUNDATEC
Órgão
IFC
Ano
2023
Cargo
PEBTT ( )

Assinale a alternativa que corresponde a um arquivo que poderia ser identificado pela expressão regular do comando abaixo caso o arquivo estivesse no diretório percorrido na execução do comando. Considere que o comando foi executado na sessão bash do sistema operacional Linux.

 

find . –name “*[0-9]”


  1. Aarquivo123abc
  2. Barquivo123
  3. Carquivo002x
  4. D123arquivo
  5. Earquivo1_
Revelar gabarito e comentário

GabaritoB — arquivo123

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Expressões regulares e globs no comando find do Linux

Gabarito: letra B. O comando find . -name "*[0-9]" procura, a partir do diretório atual (.), arquivos cujo nome termina com um dígito (0 a 9). A única alternativa que atende a esse critério é arquivo123, pois termina com o dígito 3. As demais ou terminam com letra, ou com caractere especial, ou não correspondem ao padrão.

O padrão *[0-9] é um glob (padrão de casamento de nomes de arquivos usado pelo shell e pelo find), não uma expressão regular completa do tipo ERE/PCRE. Nesse contexto, o * é um curinga que casa com qualquer sequência de caracteres (inclusive vazia), e [0-9] é uma classe de caracteres que casa com um único dígito (0, 1, 2, ..., 9). Como o padrão não tem nada depois de [0-9], o nome do arquivo deve terminar com um dígito. O find percorre o diretório atual (.), incluindo subdiretórios, e lista os arquivos que casam com o padrão.

Vamos entender cada parte do comando:

  • find: comando que procura arquivos e diretórios.

  • .: o ponto indica o diretório atual (o diretório de trabalho). O find percorre a partir daí, incluindo subdiretórios.

  • -name: opção que filtra pelo nome do arquivo (não pelo caminho completo).

  • "*[0-9]": o padrão de casamento. As aspas protegem o padrão da expansão pelo shell (se não houvesse aspas, o shell poderia expandir o * antes de o find receber o argumento).

O padrão *[0-9] casa com qualquer nome que termine com um dígito, independentemente do que vem antes. Por exemplo, arquivo123, foto2, dados_2023 e 1 (um nome de arquivo que é só um dígito) casariam. Já arquivo123abc não casa, pois termina com a letra c; arquivo002x termina com x; 123arquivo termina com o; e arquivo1_ termina com _ (sublinhado).

A pegadinha clássica desta questão é confundir o glob com uma expressão regular completa. Em uma expressão regular, * significa "zero ou mais do caractere anterior", mas em um glob, * significa "qualquer sequência de caracteres". Além disso, o [0-9] é uma classe de caracteres que casa com um único dígito, não com uma sequência de dígitos. O padrão *[0-9] exige que o último caractere do nome seja um dígito.

NÃO CAIA NESSA!

A banca explora a confusão entre glob e expressão regular. Em glob, * casa com qualquer sequência (inclusive vazia), e [0-9] casa com um único dígito. O padrão *[0-9] exige que o nome termine com um dígito. Alternativas como arquivo123abc e arquivo002x parecem conter dígitos, mas não terminam com eles — é exatamente aí que o candidato desatento erra.

Padrão "*[0-9]" (glob)
  • 1* = qualquer sequência (inclusive vazia)
  • 2[0-9] = um único dígito
  • 3Exige nome terminando em dígito
  • 4Análise das alternativas
    • arquivo123 (termina em 3)
    • arquivo123abc (termina em c)
    • arquivo002x (termina em x)
    • 123arquivo (termina em o)
    • arquivo1_ (termina em _)
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

arquivo123abc não casa com o padrão *[0-9], pois termina com a letra c, não com um dígito. O padrão exige que o último caractere do nome seja um dígito (0 a 9). Aqui, os dígitos 123 estão no meio do nome, mas o final é abc, o que desqualifica o arquivo.

Alternativa B — ✅ Correta ⟵ GABARITO

arquivo123 casa perfeitamente com o padrão *[0-9]: o * casa com arquivo12 e o [0-9] casa com o dígito final 3. O nome termina com um dígito, atendendo exatamente ao critério do comando find . -name "*[0-9]".

Alternativa C — ❌ Incorreta

arquivo002x não casa, pois termina com a letra x. Apesar de conter os dígitos 002 no meio, o padrão exige que o último caractere seja um dígito. O x final quebra o casamento.

Alternativa D — ❌ Incorreta

123arquivo não casa, pois termina com a letra o. O padrão *[0-9] exige que o nome termine com um dígito, e aqui os dígitos 123 estão no início do nome, não no final. O * poderia casar com 123arquiv, mas o [0-9] precisaria casar com o, o que não é um dígito.

Alternativa E — ❌ Incorreta

arquivo1_ não casa, pois termina com o caractere _ (sublinhado), que não é um dígito. O padrão exige que o último caractere seja um dígito (0 a 9), e o _ não se enquadra na classe [0-9].

Gabarito: letra B — apenas arquivo123 termina com um dígito, atendendo ao padrão *[0-9] do comando find.

Link permanente: /questoes/qa543528