1 votos

¿Fusionar archivos y mantener el archivo más grande si hay duplicados?

Tengo varias carpetas que contienen cada una varios cientos de miles de archivos txt, llamémoslas f1, f2, f3, f4.

Quiero mover todos los archivos a una carpeta, digamos F0 y - si hay archivos duplicados - mantener los archivos más grandes (kb o número de líneas) y eliminar los más pequeños.

¿Hay alguna forma de hacerlo con relativa rapidez?

Muchas gracias de antemano.

edit: Al intentar un simple mv -comando, obtuve -bash: /bin/mv: Argument list too long . Así que creo que es otro obstáculo que hay que superar.

0 votos

mv por sí solo no resolverá la parte de "tomar el archivo más grande" de todos modos, usted está buscando una combinación de find , test , stat y mv .

0 votos

@nohillside Ok, gracias -- descarté la idea de probar el tamaño ya que necesito eliminar otros errores en los archivos no duplicados después de este paso de todos modos. `find raw_data2 -name ' . ' -exec mv {} raw_data1 ` solucionó el problema de mi edición anterior.

1voto

Si omite la prueba de tamaño

find f1 f2 f3 f4 -type f -exec mv {} f0/ \;

debería funcionar.

Con un recuento de líneas (por lo que el archivo con más líneas gana) y asumiendo que todos los archivos son de texto se vuelve un poco más sofisticado:

find f1 f2 f3 f4 -type f -execdir sh -c \
    '[[ ! -e f0/"$1" || $(wc -l < "$1") -gt $(wc -l < f0/"$1") ]] && \
         mv "$1" f0/' _ {} \;

Y, por último, si desea comparar el tamaño de los archivos, debe sustituir las dos apariciones de wc -l < (incluyendo el < ) con stat -f '%z' .

PS: Para cientos de miles de archivos de texto tanto find los enfoques llevarán un tiempo. El segundo utilizando stat debería ser significativamente más rápido que usar wc sin embargo.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X