Trabajando en SEO, tengo un sitio de cliente que tiene cientos, tal vez miles, de imágenes cargadas.
Rastreé el sitio con la araña Screaming Frog SEO y segmenté los datos de rastreo para enumerar todas las imágenes en uso en el sitio y descargué una copia local de la carpeta donde se cargan las imágenes.
No necesito comparar los archivos reales, solo 2 listas de los nombres de todos los archivos (estos u otros archivos, tareas como esta son bastante comunes para mí).
Me siento cómodo con Sublime Text (y sus múltiples cursores y funciones avanzadas de búsqueda y reemplazo) y estoy familiarizado con herramientas de línea de comandos como grep
. (Usuario Mac)
Supongo que el primer paso sería eliminar los duplicados dentro de cada lista y luego comparar las listas que producirían una lista de archivos que están tanto en la "lista 1" como en la "lista 2" y/o que no están en la "lista 1". pero están en la "lista 2".
Puede usar VLOOKUP()
la función en Excel (o en una hoja de cálculo equivalente). Es la forma más rápida y no requiere programación. BUSCARV está bien descrito en Internet. Pero si te quedas atascado en algún lugar, agrega el comentario y te ayudaré.
La posible limitación es el límite de altura de la hoja: puede tener hasta 1 048 576 filas.
Cuando miré las dos respuestas anteriores, eran "correctas" y las marqué como tales.
Al resolverlo, un amigo mío me habló del comando Bash para "único".
Resulta que se uniq
usa junto consort.
Una vez que supe el nombre, una búsqueda rápida arrojó esta respuesta de Stackoverflow .
Yo usaría python , (ya instalado en mac/linux/unix y disponible para Windows) , algo como:
from glob import glob
actual_files = set(glob('/path/to/images/*.jpg')) # The actual files as a set
with open('list/of/Images/Referenced') as f: # Assuming that you have the referenced files as one per line with just the image tags
rf = [fp for fp in f.readlines().split('/')[-1]] # You only need the actual filename
referenced_files = set(rf) # Make a list of unique references
unused = actual_files - referenced_files
print('Files Present But Unused:', unused)
missing = referenced_files - actual_files
print ('Files Referenced But Missing;', missing)
NB No he probado lo anterior y asumo que su lista de archivos es una ruta al archivo por línea sin nada más en la línea.
Tenga en cuenta que podría usar un rastreador de Python, ( scrapy ), para rastrear el sitio y ssh remoto, también desde Python, para obtener la lista para automatizar todo el proceso si necesita hacer algo como esto regularmente.
Dados dos archivos ordenados, el comando comm
imprime las líneas que son únicas para un archivo u otro. Primero deberá eliminar la parte del directorio, que sed
. Utilícelo comm -12
para ver las líneas comunes, comm -23
para ver las líneas exclusivas del primer archivo y comm -13
para ver las líneas exclusivas del segundo archivo.
<remote-name-list.txt sed -e 's!.*/!!' | sort >remote-name-list.sorted.txt
<local-name-list.txt sed -e 's!.*/!!' | sort >local-name-list.sorted.txt
comm -23 remote-name-list.sorted.txt local-name-list.sorted.txt >remote-only.txt
Si solo desea ver una lista de nombres sin duplicación, puede usar sort -u
. Si está interesado en los duplicados, acceda a uniq
.
<local-name-list.txt sed -e 's!.*/!!' | sort | uniq -c | grep -v '^ *1 '
Si en algún momento desea comparar el contenido del archivo, puede usar fdupes ( disponible en Homebrew ). Para buscar imágenes visualmente similares, puede usar findimagedupes .
Nicolás Raúl