31/05/2026

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

' _ {} \;


Explicando o comando 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.

Nenhum comentário:

Postar um comentário