ede_linux
(usa Ubuntu)
Enviado em 13/08/2017 - 05:07h
Olá a todos,
ME desculpem mas é que na altura não percebia o suficiente para entender o excelente script que o
Campacci passou! :)
find . -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 20 > arquivos_duplicados.txt
Ok, estive a estudar o script e testei o mesmo e foram estas as conclusões que cheguei. Digam-me s.f. se estou certo, desde já o meu obrigado.
Find - O bom e velho find. Os parâmetros são:
-type f = regular files, imagino que sejam todos os ficheiros comuns
-exec md5sum '{}' ';' = o comando find permite como parâmetro a execução de um programa, neste caso o md5sum . Pelo que percebi, lendo o manual do find, ele vai apenas extrair os resultados que tenham ponto e vírgula no final?!!? Esta parte não percebi.
"This variant of the -exec action runs the specified command on
the selected files, but the command line is built by appending
each selected file name at the end; the total number of invoca‐
tions of the command will be much less than the number of
matched files. The command line is built in much the same way
that xargs builds its command lines. Only one instance of `{}'
is allowed within the command, and (when find is being invoked
from a shell) it should be quoted (for example, '{}') to protect
it from interpretation by shells. The command is executed in
the starting directory. If any invocation returns a non-zero
value as exit status, then find returns a non-zero exit status.
If find encounters an error, this can sometimes cause an immedi‐
ate exit, so some pending commands may not be run at all. This
variant of -exec always returns true."
O comando
sort serve para ordenar o resultado do comando find. Não sei qual é o critérios, uma vez que não é passado parâmetros.
uniq
Este comando não conhecia. Serve para reportar ou omitir linhas repetidas. Os parâmetros utilizados permitem separar os grupos com uma linha em branco. Os grupos, neste caso, são os valores repetidos.
Não percebo o conceito de grupos!
Por fim, compara apenas os primeiros 20 caracteres em cada linha, não mais do que isso!
uniq --all-repeated=separate -w 20
Portanto, executamos o
find para procurar todos os arquivos. No comando find, como parâmetro executamos o md5sum (para que serve? Penso que seja para ver um número único que identifica cada ficheiro, certo? Pelo que testei me retorna um número como por exemplo "490a3ffe1d99ebf2ea0da0509a1b4cd6"). Ordenamos todos os resultados do comando find. Por fim, todos os valores repetidos são separados em grupos por uma linha em branca. Basta a linha ter os primeiros valores repetidos, que neste caso é o resultado do md5sum, que ele identifica como repetido.
Exemplo de um valor recolhido do md5sum
5fef2f84638fd071fd1e20f8ade591c5
É isto?
Obrigado pelas dicas