Descargué muchas imágenes en un directorio.
Descargador renombrado archivos que ya existen.
También cambié el nombre de algunos de los archivos manualmente.
a.jpg
b.jpg
b(2).jpg
hello.jpg <-- manually renamed `b(3).jpg`
c.jpg
c(2).jpg
world.jpg <-- manually renamed `d.jpg`
d(2).jpg
d(3).jpg
¿Cómo eliminar los duplicados? El resultado debería ser:
a.jpg
b.jpg
c.jpg
world.jpg
nota: el nombre no importa. Solo quiero archivos uniq.
echo cksm
justo después de la línea que comienzaread
si desea ver el hash de cada archivo.**
, ordena la lista de tal manera que las dos carpetas se intercalan en lugar de toda la carpeta 1 y luego toda la carpeta 2. El script siempre dejará el primer 'original' golpea mientras itera por la lista. Puedeecho $file
antes de laread
línea para ver si esto es cierto.fdupes es la herramienta de su elección. Para buscar todos los archivos duplicados (por contenido, no por nombre) en el directorio actual:
Para confirmar manualmente la eliminación de archivos duplicados:
Para eliminar automáticamente todas las copias, excepto la primera de cada archivo duplicado ( tenga cuidado, esta advertencia, esto realmente elimina los archivos, según lo solicitado ):
Recomiendo verificar manualmente los archivos antes de eliminarlos:
fuente
-d '\n'
fdupes -rdN .
donde -r es recursivo, -d es eliminar y -N no es rápidoPuedes probar FSLint . Tiene línea de comando e interfaz GUI .
fuente
Siendo un poco flojo, no me llevó mucho tiempo encontrar uno en línea .
Primero debe crear una suma de verificación CRC de cada archivo, ya que obviamente solo desea eliminar los duplicados exactos.
Luego, repita esta lista de archivos, leyendo la suma de comprobación y también el nombre del archivo. Si dos sumas de verificación son iguales, el archivo se eliminará. Esto funciona, ya que el orden es numérico y solo se ordena en las sumas de verificación, que agrupa los archivos duplicados.
Obviamente, esto no funciona de forma recursiva.
fuente
¿Cómo probar archivos con contenido único?
¿Cómo podemos obtener la lista de archivos en el directorio?
Podemos obtener 2 archivos de esa lista y verificar si sus nombres son diferentes y el contenido es el mismo.
Por ejemplo, tenemos algunos dir:
Entonces solo hay 3 archivos únicos.
Vamos a ejecutar ese script:
Y solo tenemos 3 archivos con hojas.
fuente
Escribí este pequeño script para eliminar archivos duplicados
https://gist.github.com/crodas/d16a16c2474602ad725b
Básicamente utiliza un archivo temporal (
/tmp/list.txt
) para crear un mapa de archivos y sus hashes. Más tarde uso esos archivos y la magia de las tuberías Unix para hacer el resto.El script no eliminará nada, pero imprimirá los comandos para eliminar archivos.
mfilter.sh ./dir | bash
Espero eso ayude
fuente
Versión más concisa de eliminar archivos duplicados (solo una línea)
find_same_size.sh
fuente
Encontré una manera más fácil de realizar la misma tarea
fuente
La mayoría y posiblemente todas las respuestas restantes son terriblemente ineficientes al calcular la suma de verificación de todos y cada uno de los archivos en el directorio para procesar.
Un enfoque potencialmente más rápido de órdenes de magnitud es obtener primero el tamaño de cada archivo, que es casi inmediato (
ls
ostat
), y luego calcular y comparar las sumas de verificación solo para los archivos que tienen un tamaño no único.fuente
Esto no es lo que está preguntando, pero creo que alguien podría encontrarlo útil cuando las sumas de verificación no son las mismas, pero el nombre es similar (con sufijo entre paréntesis). Este script elimina los archivos con sufijos como ("dígito")
fuente
Encontré un pequeño programa que realmente simplifica este tipo de tareas: fdupes .
fuente