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