Esta é uma boa maneira que escrevi para encontrar apenas os arquivos repetidos que ignoram a extensão:
find . -exec bash -c 'basename "$0" ".${0##*.}"' {} \; | sort | uniq --repeated
Depois eu coloquei esse loop para encontrar o menor dos dois arquivos para cada um:
for i in $(find . -exec bash -c 'basename "$0" ".${0##*.}"' {} \; | sort | uniq --repeated); do find . -name "$i*" -printf '%s %p\n' | sort -n | head -1 | cut -d ' ' -f 2-; done
Finalmente, mais um loop para (interativamente, com rm -i
, portanto há um prompt antes de cada um), exclua todos os arquivos:
for j in $(for i in $(find . -exec bash -c 'basename "$0" ".${0##*.}"' {} \; | sort | uniq --repeated); do find . -name "$i*" -printf '%s %p\n' | sort -n | head -1 | cut -d ' ' -f 2-; done); do rm -i "$j"; done
Como isso envolve fazer dois find
s no seu diretório, certamente existe uma maneira melhor. Mas isso deve funcionar para casos simples. Ele também assume que você está trabalhando a partir do diretório atual, se você quiser executar o comando em um diferente, apenas altere o argumento .
para os dois comandos find
.