Estoy usando OSX 10.8.4 y me gustaría eliminar archivos duplicados en un solo directorio plano si un hash md5 coincide.
He buscado varias respuestas, pero ninguna de ellas me funciona, creo que debido a las diferencias en la sintaxis de comandos entre las versiones de terminal.
Cosas que he probado:
http://www.chriswrites.com/2012/02/how-to-find-and-delete-duplicate-files-in-mac-os-x/
Encontrar y eliminar archivos duplicados en osx con un script
y algunos de estos: http://www.commandlinefu.com/commands/view/3555/find-duplicate-files-based-on-size-first-then-md5-hash#comment
Este enfoque se siente más cercano:
find . -size 20 \! -type d -exec cksum {} \; | sort | tee /tmp/f.tmp | cut -f 1,2 -d ' ' | uniq -d | grep -hif - /tmp/f.tmp > duplicates.txt
Pero me sale un error: grep: -: No such file or directory
Tras la inspección, /tmp/f.tmp existe. El archivo duplicates.txt se crea pero está vacío.
¿Cómo deduplicar estos archivos?
fuente
Respuestas:
De manera predeterminada, en Mac OS obtendrá BSD
grep
, mientras que el comando que ha publicado es probablemente para GNUgrep
. Las dos versiones de las herramientas son similares, pero no idénticas. Esto también es cierto para otras herramientas (por ejemplo, las versiones de GNU y BSD también sedate
comportan de manera ligeramente diferente).El problema es el
-
siguiente comando grep. GNUgrep
interpreta esto comostdin
(por lo tanto, aquellas líneas que han sido identificadas como duplicadas poruniq -d
), mientras que BSDgrep
está buscando un momento llamado-
; de ahí el mensaje de error:Lo mismo sucede si reemplaza el
-
con otro nombre que no coincide con ningún archivo:De que puede en bash sustitución proceso para alimentar a la salida estándar del todo hasta el
uniq
quegrep
como un archivo, por ejemplo, (se me ha caído el criterio de tamaño en este ejemplo, pero el resto es lo mismo):fuente
Encontrar duplicados basados en hashkey funciona bien y es muy rápido. Yo uso el siguiente código a menudo. Si está ejecutando esto en una Mac y enfrenta algún problema, instale las herramientas de GNU y use la segunda versión.
Linux
Versión para Mac
fuente
uniq -w32
es realmente la pieza que faltaba en el rompecabezas - sin coincidencia de líneas parcial, la búsqueda de duplicados es significativamente más difícil (sobre todo en un lenguaje shell).