1

"Linha de shell" para remover da pasta atual arquivos que estão duplicados em subpastas

Necessidade: Remover arquivos da pasta atual quando já existe uma cópia idêntica (mesmo nome e mesmo conteúdo) em algum subdiretório.

Solução: Uma daquelas linhas de shell que parecem feitiçaria, mas resolvem o problema. 😄

find . -maxdepth 1 -type f -exec sh -c '
  arq="$1"
  nome=$(basename "$arq")
  find . -mindepth 2 -type f -name "$nome" | while read -r outro; do
    cmp -s "$arq" "$outro" && rm "$arq" && break
  done
' _ {} \;

Passo a passo:

  • find externo percorre apenas o diretório atual (-maxdepth 1) em busca apenas de arquivos (-type f).
  • -exec sh -c cria um pequeno script inline para cada arquivo encontrado.
  • {} é passado como argumento para o shell e recebido em $1.
  • basename extrai apenas o nome do arquivo.
  • Um segundo find procura arquivos com o mesmo nome em subdiretórios (-mindepth 2).
  • while read -r percorre os resultados com segurança.
  • cmp -s compara o conteúdo dos arquivos em modo silencioso (o "exit code" indica igualdade).
  • && encadeia a ação: se os arquivos forem idênticos, executa rm.
  • break interrompe a busca após encontrar a primeira cópia válida.

#linux #bash #sh #shell #devops

Carregando publicação patrocinada...