Tengo dos carpetas que contienen varios archivos. Algunos de los archivos de la primera carpeta tienen una copia exacta en la segunda carpeta. Me gustaría reemplazarlos con un enlace físico. ¿Cómo puedo hacer eso?
Respuesta1
Conozco 4 soluciones de línea de comandos para Linux. Mi preferido es el último que aparece aquí, rdfind
debido a todas las opciones disponibles.
fdupes
- Este parece ser el más recomendado y el más conocido.
- Es el más sencillo de utilizar, pero su única acción es eliminar duplicados.
- Para garantizar que los duplicados sean realmente duplicados (sin tardar una eternidad en ejecutarse), las comparaciones entre archivos se realizan primero por tamaño de archivo, luego por hash md5 y luego por comparación byte por byte.
Salida de muestra (con opciones "mostrar tamaño", "recursivo"):
$ fdupes -Sr .
17 bytes each:
./Dir1/Some File
./Dir2/SomeFile
enlace duro
- Diseñado para, como su nombre indica, reemplazar archivos encontrados con enlaces duros.
- Tiene una
--dry-run
opción. - No indica cómo se comparan los contenidos, pero a diferencia de todas las demás opciones, tiene en cuenta el modo del archivo, el propietario y la hora de modificación.
Salida de muestra (tenga en cuenta que mis dos archivos tienen tiempos de modificación ligeramente diferentes, por lo que en la segunda ejecución le digo que lo ignore):
$ stat Dir*/* | grep Modify
Modify: 2015-09-06 23:51:38.784637949 -0500
Modify: 2015-09-06 23:51:47.488638188 -0500
$ hardlink --dry-run -v .
Mode: dry-run
Files: 5
Linked: 0 files
Compared: 0 files
Saved: 0 bytes
Duration: 0.00 seconds
$ hardlink --dry-run -v -t .
[DryRun] Linking ./Dir2/SomeFile to ./Dir1/Some File (-17 bytes)
Mode: dry-run
Files: 5
Linked: 1 files
Compared: 1 files
Saved: 17 bytes
Duration: 0.00 seconds
sin valor
- Creado para encontrar archivos sobre los que luego actúa el usuario; no tiene acciones disponibles.
- Las comparaciones se realizan por tamaño de archivo y luego por hash sha1.
- El hash se puede cambiar a sha256, sha384 o sha512.
- Hash se puede desactivar para hacer una comparación byte por byte
Salida de muestra (con opción "recursiva"):
$ duff -r .
2 files in cluster 1 (17 bytes, digest 34e744e5268c613316756c679143890df3675cbb)
./Dir2/SomeFile
./Dir1/Some File
encontrar
- Las opciones tienen una sintaxis inusual (¿destinada a imitar
find
?). - Varias opciones de acciones a realizar en archivos duplicados (eliminar, crear enlaces simbólicos, crear enlaces físicos).
- Tiene un modo de funcionamiento en seco.
- Las comparaciones se realizan por tamaño de archivo, luego los primeros bytes, luego los últimos bytes y luego md5 (predeterminado) o sha1.
- La clasificación de los archivos encontrados hace que sea predecible qué archivo se considera el original.
Salida de muestra:
$ rdfind -dryrun true -makehardlinks true .
(DRYRUN MODE) Now scanning ".", found 5 files.
(DRYRUN MODE) Now have 5 files in total.
(DRYRUN MODE) Removed 0 files due to nonunique device and inode.
(DRYRUN MODE) Now removing files with zero size from list...removed 0 files
(DRYRUN MODE) Total size is 13341 bytes or 13 kib
(DRYRUN MODE) Now sorting on size:removed 3 files due to unique sizes from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on md5 checksum:removed 0 files from list.2 files left.
(DRYRUN MODE) It seems like you have 2 files that are not unique
(DRYRUN MODE) Totally, 17 b can be reduced.
(DRYRUN MODE) Now making results file results.txt
(DRYRUN MODE) Now making hard links.
hardlink ./Dir1/Some File to ./Dir2/SomeFile
Making 1 links.
$ cat results.txt
# Automatically generated
# duptype id depth size device inode priority name
DUPTYPE_FIRST_OCCURRENCE 1 1 17 2055 24916405 1 ./Dir2/SomeFile
DUPTYPE_WITHIN_SAME_TREE -1 1 17 2055 24916406 1 ./Dir1/Some File
# end of file
Respuesta2
te lo recomiendo muchojdupes. Es una bifurcación mejorada defdupes, pero también incluye:
- un montón de nuevas opciones de línea de comandos, incluyendo
--linkhard
, o-L
para abreviar - soporte nativo para todas las principales plataformas de sistema operativo
- Se dice que la velocidad es 7 veces más rápida que la de los fdupes en promedio.
Para tu pregunta, puedes simplemente ejecutar$ jdupes -L /path/to/your/files
.
Es posible que desee clonar y crear la fuente más reciente a partir de surepositorio de GitHubya que el proyecto aún se encuentra en desarrollo activo.
binarios de windowsTambién se proporcionan aquí. Los archivos binarios empaquetados están disponibles en algunas distribuciones de Linux/BSD; de hecho, los encontré por primera vez a través de $ apt search
.
Respuesta3
Comandante duplicadoes una posible solución en Windows:
Duplicate Commander es una aplicación gratuita que le permite buscar y administrar archivos duplicados en su PC. Duplicate Commander viene con muchas funciones y herramientas que le permiten recuperar su espacio en disco a partir de esos duplicados.
Características:
Replacing files with hard links Replacing files with soft links ... (and many more) ...
Para Linux puedes encontrar un script Bashaquí.
Respuesta4
Tenía una ingeniosa herramienta gratuita en mi computadora llamada Link Shell Extension; ¡No solo fue excelente para crear vínculos físicos y vínculos simbólicos, sino también uniones! Además, agregó íconos personalizados que permiten identificar fácilmente diferentes tipos de enlaces, incluso aquellos que ya existían antes de la instalación; Las flechas rojas representan enlaces físicos, por ejemplo, mientras que las verdes representan enlaces simbólicos... y las cadenas representan uniones.
Desafortunadamente, desinstalé el software hace un tiempo (en una desinstalación masiva de varios programas), por lo que no puedo crear más enlaces manualmente, pero los íconos aún aparecen automáticamente cada vez que Windows detecta un enlace físico, simbólico o de unión.