Questão de Sistemas Operacionais — Scripts em Unix e Linux — FUNDATEC 2023
Sistemas Operacionais›Scripts 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]”
Aarquivo123abc
Barquivo123
Carquivo002x
D123arquivo
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
arquivo123abcnã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
arquivo002xnã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
123arquivonã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.