Deduplizieren und dann eindeutige Namen/Strings anzeigen

Ich arbeite an SEO und habe eine Kundenseite, auf der Hunderte, vielleicht Tausende von Bildern hochgeladen wurden.

Ich habe die Seite mit Screaming Frog SEO Spider gecrawlt und Crawling-Daten segmentiert, um alle auf der Seite verwendeten Bilder aufzulisten, und ich habe eine lokale Kopie des Ordners heruntergeladen, in den die Bilder hochgeladen wurden.

Ich muss nicht die eigentlichen Dateien vergleichen, sondern nur 2 Listen mit den Namen aller Dateien (diese oder andere Dateien, Aufgaben wie diese sind für mich ziemlich üblich).

Ich bin vertraut mit Sublime Text (und seinen mehreren Cursorn und erweiterten Funktionen zum Suchen und Ersetzen) und bin mit Befehlszeilentools wie grep. (Mac-Benutzer)

Ich nehme an, dass der erste Schritt darin bestehen würde, Duplikate in jeder Liste zu eliminieren und dann die Listen zu vergleichen, was eine Liste von Dateien ergeben würde, die sowohl in "Liste 1" als auch in "Liste 2" enthalten sind und/oder die nicht in "Liste 1" enthalten sind ", sind aber in "Liste 2".

Antworten (4)

Sie können die VLOOKUP()Funktion in Excel (oder in einer entsprechenden Tabelle) verwenden. Es ist der schnellste Weg und erfordert keine Programmierung. Der SVERWEIS ist im Internet gut beschrieben. Aber wenn Sie irgendwo stecken bleiben, fügen Sie den Kommentar hinzu und ich helfe Ihnen.

Mögliche Begrenzung ist die Höhenbegrenzung des Blattes – es kann bis zu 1.048.576 Zeilen haben.

Als ich mir beide Antworten oben angesehen habe, waren sie "richtig" und ich habe sie als solche markiert.

Beim Aussortieren erzählte mir ein Freund von dem Bash-Befehl für „einzigartig“.

Es stellt sich heraus, dass es uniqin Verbindung mit verwendet wirdsort.

Sobald ich den Namen kannte, brachte eine schnelle Suche diese Stackoverflow-Antwort hervor .

Könnten Sie Ihrer Antwort bitte ein Beispiel hinzufügen? Vielen Dank!

Ich würde python ( bereits auf Mac/Linux/Unix installiert und für Windows verfügbar) verwenden , etwa so:

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 : Ich habe das Obige nicht getestet und gehe davon aus, dass Ihre Dateiliste einen Pfad zu der Datei pro Zeile mit nichts anderem in der Zeile enthält.

Beachten Sie, dass Sie einen Python-Crawler ( Scrapy ) verwenden könnten, um die Site zu crawlen und ssh auch von Python aus zu entfernen, um die Auflistung zu erhalten, um den gesamten Prozess zu automatisieren, wenn Sie so etwas regelmäßig tun müssen.

Bei zwei sortierten Dateien gibt der Befehl commdie Zeilen aus, die für die eine oder andere Datei eindeutig sind. Sie müssen zuerst den Verzeichnisteil entfernen, der sed. Verwenden Sie comm -12, um die gemeinsamen Zeilen anzuzeigen, comm -23um die Zeilen anzuzeigen, die für die erste Datei eindeutig sind, und comm -13um die Zeilen anzuzeigen, die für die zweite Datei eindeutig sind.

<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

Wenn Sie nur eine Liste mit Namen ohne Duplikate sehen möchten, können Sie verwenden sort -u. Wenn Sie an den Duplikaten interessiert sind, melden Sie sich bei uniq.

<local-name-list.txt sed -e 's!.*/!!' | sort | uniq -c | grep -v '^ *1 '

Wenn Sie irgendwann die Dateiinhalte vergleichen möchten, können Sie fdupes ( verfügbar in Homebrew ) verwenden. Um nach visuell ähnlichen Bildern zu suchen, können Sie findimagedupes verwenden .

Danke für die ausführliche Antwort. Ich hatte noch keine Zeit, es auszuprobieren, aber es gibt mir eine Menge, von der ich lernen kann. Und alles, was in Homebrew verfügbar ist, ist großartig, da es so einfach zu verwenden ist.