ubuntuusers.de

doppelte Dateinamen rekursiv finden

Status: Ungelöst | Ubuntu-Version: Xubuntu 24.04 (Noble Numbat)
Antworten |

stantheman

Avatar von stantheman

Anmeldungsdatum:
14. Dezember 2006

Beiträge: 25

Wohnort: parterre

Von einem guten Dutzend Datenträgern habe ich ca. 148k Grafiken zusammengetragen und in das Verzeichnis ordner_alt verschoben. Dubletten habe ich raus genommen, Namensgleichheit kommt trotzdem vor. Alle Dateien befinden sich in einer komplett unsortierten Ordnerstruktur. Um der Sache eine Struktur zu geben, habe ich von exiftool alles in nach Datum benannte Verzeichnisse sortieren lassen.

exiftool -o . '-Directory<DateTimeOriginal' -d /ordner_neu/%Y/%m/%d -r /ordner_alt

Das hat gut geklappt.

...bis auf die letzte Zeile der Meldung

  250 directories scanned
  147 directories created
    0 image files updated
147929 image files copied
  226 files weren't updated due to errors

Das verstehe ich so, dass 226 fehlerhafte Dateien aus ordner_alt nicht in die neue Verzeichnisstruktur in ordner_neu sortiert wurden. Also hab ich nachgezählt. Kommt hin.

Meine wage Vermutung ist, dass das zwar unterschiedliche Dateien, aber mit jeweils gleichen Namen sind, die dann in den gleichen Ordner sortiert werden sollen.

Alle Dublettenfinder und Vergleichstools, die ich laienhaft ausprobiert habe (Krokiet, fdupes, diff), vergleichen den Inhalt und geben entsprechende Meldungen aus.

Was ich bräuchte, wäre nur die Information, welche Dateien in meinem Verzeichnis-Dschungel einfach nur den selben Namen haben und wo ich sie finde und ggf. umbenennen kann.

Gibt es da was?

STRAGIC-IT

Avatar von STRAGIC-IT

Anmeldungsdatum:
3. Januar 2006

Beiträge: 3598

Wohnort: Fürth

Hallo stantheman, viel zu stressig… Du kannst gerne die Bilderverwaltung SHOTWELL testen…

BYE HS

trollsportverein

Avatar von trollsportverein

Anmeldungsdatum:
21. Oktober 2010

Beiträge: 5940

Hast Du dir schon mal die Manual-Seite zu uniq angeschaut?

stantheman

(Themenstarter)
Avatar von stantheman

Anmeldungsdatum:
14. Dezember 2006

Beiträge: 25

Wohnort: parterre

trollsportverein schrieb:

Hast Du dir schon mal die Manual-Seite zu uniq angeschaut?

Gerade eben. Danke für den Tipp. Wenn ich mir aber mit find eine Textdatei mit allen Dateinamen generieren lasse, sind da ja immer die Pfade mit dazu. Das ergibt immer verschiedene Zeilen, egal wie ich sortiere. Oder übersehe ich da was?

STRAGIC-IT schrieb:

...Bilderverwaltung SHOTWELL …>

Das wäre wirklich der letzte Schritt, den ich gehen würde in dieser Sache. Da es sich wahrscheinlich (und hoffentlich) um eine einmalige Aktion handelt, würde ich nur sehr ungern derartige Anwendungen installieren. Könnte Shotwell denn auf doppelte Dateinamen filtern?

TNTMaster

Anmeldungsdatum:
30. Juli 2009

Beiträge: 897

Erster Treffer der Suchmaschine: https://stackoverflow.com/a/16278407

"Solution 2" sollte tun, was du willst. Hier als Einzeiler etwas abgeändert (Pfad entsprechend anpassen):

tempfile=$(mktemp); find "/Pfad/zu/Ordner" -type f >$tempfile; cat $tempfile | sed 's|.*/||' | sort | uniq -d | while read f; do grep "/$f$" $tempfile; done

Gruß TNT

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1449

Man kann auch ohne eine Hilfsdatei in einem Einzeiler die Aufgabe lösen mittels des Befehls:

find ./ -type f | sed 'y/ /°/;s#.*/#& #' | sort -t\  -k2 | uniq -f 1 -D | sed 's/ //g;y/°/ /'

Ablauf: Temporär werden Blanks in den File-/Directory-Namen zu einem "°" Zeichen umgesetzt und hinter die Verzeichnisstruktur ein "Blank" gesetzt, damit "uniq -f" funktionieren kann. Diese Änderungen werden nach der Ausgabe mittels "uniq -D" wieder zurück gesetzt.

Damit man es mal testen kann, kann man die Testumgebung z.B. wie folgt erstellen:

# erzeuge Testumgebung
d=( "Dies ist/ein Verzeichnis" "Eins/zwei/Drei" "auch/hier" )
f=( "file1.txt" "file zwei.txt" "file 3.txt" )
for i in "${d[@]}"; do mkdir -p "$i"; done
for i in "${d[@]}"; do for j in "${f[@]}"; do touch "$i/$j"; done; done
for i in {0..2}; do touch "${d[$i]}/uniq$i.txt"; done

PS: Wenn man Bange hat, dass im Filenamen oder Verzeichnis ein "°" auftaucht und dies nicht in ein Blank gewandelt werden soll, kann man auch einen Hex-Wert (z.B. \x00) statt ° eintragen.

Antworten |