Estou trabalhando no Linux, o que significa que é o comando md5sum
que gera:
> md5sum *
d41d8cd98f00b204e9800998ecf8427e file_1
d41d8cd98f00b204e9800998ecf8427e file_10
d41d8cd98f00b204e9800998ecf8427e file_2
d41d8cd98f00b204e9800998ecf8427e file_3
d41d8cd98f00b204e9800998ecf8427e file_4
d41d8cd98f00b204e9800998ecf8427e file_5
d41d8cd98f00b204e9800998ecf8427e file_6
d41d8cd98f00b204e9800998ecf8427e file_7
d41d8cd98f00b204e9800998ecf8427e file_8
d41d8cd98f00b204e9800998ecf8427e file_9
b026324c6904b2a9cb4b88d6d61c81d1 other_file_1
31d30eea8d0968d6458e0ad0027c9f80 other_file_10
26ab0db90d72e28ad0ba1e22ee510510 other_file_2
6d7fce9fee471194aa8b5b6e47267f03 other_file_3
48a24b70a0b376535542b996af517398 other_file_4
1dcca23355272056f04fe8bf20edfce0 other_file_5
9ae0ea9e3c9c6e1b9b6252c8395efdc1 other_file_6
84bc3da1b3e33a18e8d5e1bdd7a18d7a other_file_7
c30f7472766d25af1dc80b3ffc9a58c7 other_file_8
7c5aba41f53293b712fd86d08ed5b36e other_file_9
Agora, usando awk
e xargs
, o comando seria:
md5sum * | \
sort | \
awk 'BEGIN{lasthash = ""} $1 == lasthash {print $2} {lasthash = $1}' | \
xargs rm
A parte awk
inicializa lasthash
com a cadeia vazia, que não corresponderá a nenhum hash, e então verificará cada linha se o hash em lasthash
for o mesmo que o hash (primeira coluna) da corrente arquivo (segunda coluna). Se for, imprima. No final de cada etapa, será definido lasthash
para o hash do arquivo atual (você pode limitar isso somente para ser definido se os hashes forem diferentes, mas isso deve ser uma coisa menor, especialmente se você não tiver muitos arquivos correspondentes ). Os nomes dos arquivos que o awk cospe são enviados para rm
com xargs
, que basicamente chama rm
com o que a awk
parte nos dá.
Você provavelmente precisará filtrar diretórios antes de md5sum *
.
Editar:
Usando o método Marcins, você também pode usar este:
comm -1 -2 \
<(ls) | \
<(md5sum * | \
sort -k1 | \
uniq -w 32 | \
awk '{print $2}' | \
sort) \
xargs rm
Este sub-resumo da lista de arquivos optou por ls
do primeiro nome de arquivo de cada hash exclusivo optado por md5sum * | sort -k1 | uniq -w 32 | awk '{print $2}'
.