Pular para o conteúdo principal

Questão de Sistemas Operacionais — Geral — CESPE / CEBRASPE 2024

Sistemas OperacionaisGeral
Código
ce404146
Banca
CESPE / CEBRASPE
Órgão
SEBRAE
Ano
2024
Cargo
Ana Tec II ( )
$basePath = "C:\Logs" $files = Get-ChildItem -Path $basePath -Recurse - Include *.log $count = 0 foreach ($file in $files) {     $relativePath = $file.FullName -replace [regex]::Escape($basePath), ''     $depth = ($relativePath.TrimStart('\').Split('\').Count) - 1     if ($depth -le 2) {       $count++      } } Write-Output "Total files: $count"   Após a execução desse script PowerShell, será exibida a contagem do número de arquivos .log no diretório
  1. AC:\Logs e nos que estiverem em até dois níveis de subdiretórios.
  2. BC:\Logs e nos que estiverem em até um nível de subdiretório.
  3. CC:\Logs, apenas.
  4. DC:\Logs e em todos os subdiretórios.
Revelar gabarito e comentário

GabaritoA — C:\Logs e nos que estiverem em até dois níveis de subdiretórios.

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”.

PowerShell: contagem de arquivos por profundidade

Gabarito: letra A. O script conta os arquivos .log localizados em C:\Logs e nos subdiretórios até dois níveis de profundidade, pois o cálculo $depth = ($relativePath.TrimStart('\').Split('\').Count) - 1 atribui profundidade 0 aos arquivos diretamente em C:\Logs, 1 aos que estão em um subdiretório, 2 aos que estão em dois níveis, e assim por diante — e a condição if ($depth -le 2) inclui exatamente os de profundidade 0, 1 e 2.

O script usa o cmdlet Get-ChildItem com os parâmetros -Recurse e -Include *.log para obter recursivamente todos os arquivos com extensão .log a partir do diretório base C:\Logs. Para cada arquivo, ele calcula o caminho relativo removendo o prefixo C:\Logs (usando -replace com [regex]::Escape para tratar a barra invertida como literal). Em seguida, remove a barra inicial, divide o caminho relativo pelo separador \ e conta o número de segmentos resultantes. O valor $depth é esse número menos 1, o que significa:

  • Arquivo diretamente em C:\Logs → caminho relativo vazio (após remover a barra inicial) → Split('\') retorna um array com um elemento vazio → Count = 1$depth = 0.

  • Arquivo em C:\Logs\sub1 → caminho relativo sub1Count = 1$depth = 0? Não! Vamos recalcular com cuidado: $relativePath para C:\Logs\sub1\file.log é \sub1\file.log (após remover C:\Logs). TrimStart('\') remove a barra inicial, resultando em sub1\file.log. Split('\') produz ['sub1', 'file.log'], com Count = 2. Então $depth = 2 - 1 = 1. Correto: um nível de subdiretório.

  • Arquivo em C:\Logs\sub1\sub2\file.log → caminho relativo sub1\sub2\file.logSplit['sub1','sub2','file.log']Count = 3$depth = 2. Dois níveis.

  • Arquivo em C:\Logs\sub1\sub2\sub3\file.logCount = 4$depth = 3, que não é <= 2, então não é contado.

Portanto, a condição $depth -le 2 inclui arquivos com profundidade 0, 1 e 2, ou seja, os que estão diretamente em C:\Logs e nos subdiretórios de até dois níveis. A alternativa A descreve exatamente isso.

A pegadinha clássica dessa questão é confundir a contagem de segmentos do caminho com a profundidade. Muitos candidatos contam o número de subdiretórios diretamente (ex.: sub1\sub2 = 2 níveis) e esquecem que o script subtrai 1, ou interpretam -le 2 como "até dois níveis" mas erram na base (achando que o diretório raiz conta como nível 1). Outro erro comum é achar que -Recurse sem filtro de profundidade incluiria todos os subdiretórios, mas o script impõe o limite manualmente.

  1. 1Caminho relativo (remove C:\Logs)
  2. 2Remove barra inicial
  3. 3Divide por \ e conta segmentos
  4. 4Subtrai 1 → $depth
  5. 5Conta se $depth ≤ 2
LEVEL · soulevel.com.br

Alternativa A — ✅ Correta ⟵ GABARITO

Como demonstrado, o script conta arquivos .log em C:\Logs (profundidade 0) e nos subdiretórios de até dois níveis (profundidades 1 e 2). A alternativa A espelha exatamente o comportamento do código: "C:\Logs e nos que estiverem em até dois níveis de subdiretórios".

Alternativa B — ❌ Incorreta

Afirma que a contagem inclui apenas até um nível de subdiretório. Isso subestima o alcance: a condição $depth -le 2 inclui também os arquivos em dois níveis (profundidade 2). O erro aqui é confundir o valor máximo de $depth (2) com o número de níveis de subdiretórios contados a partir do diretório base — na verdade, $depth = 2 corresponde a dois níveis de subdiretórios, não um.

Alternativa C — ❌ Incorreta

Afirma que apenas os arquivos diretamente em C:\Logs são contados. Isso ignora o -Recurse e o cálculo de profundidade: arquivos em subdiretórios de até dois níveis também são incluídos. O script não se limita ao diretório raiz.

Alternativa D — ❌ Incorreta

Afirma que todos os subdiretórios são incluídos, sem limite. O script impõe um limite de profundidade ($depth -le 2), portanto arquivos em níveis mais profundos (3 ou mais) são excluídos. A alternativa D generaliza indevidamente o comportamento do -Recurse, que por si só percorreria toda a árvore, mas o filtro manual restringe a contagem.

Gabarito: letra A

Link permanente: /questoes/ce404146