Dr1zzt
Anmeldungsdatum: 14. August 2010
Beiträge: 9
|
Hallo zusammen Ich suche ein Skript, ein Programm oder Anregungen, wie ich doppelte Mediadateien anhand des Dateinamen finde. Die Mediendateien sind teilweise unterschiedlich kodiert, deswegen komme ich mit fdupes und konsorten, welche nach Prüfsummen vergleichen nicht mehr weiter. Die Herausforderung ist, dass die Mediendateien teilweise recht "wild" benannt sind und teilweise unterschiedliche Dateiformate haben. Bespieldatei: Der große Krieger auf dem Schlachtfeld.mp3
Der_große_Krieger_auf_dem_Schlachtfeld.mp3
DergroßeKriegeraufdemSchlachtfeld.mp3
dergroßekriegeraufdemschlachtfeld.mp3
Der große Krieger.mp3
Der_große_Krieger_auf_dem_Schlachtfeld_Superhoerspiel.mp3
EMPFEHLENSWERT Der große Krieger auf dem Schlachtfeld.mp3
großKrieger_auf_dem_Schlachtfeld.mp3
DgroKriegaufdSchlachtfeld.mp3
auf dem Schlachtfeld.mp3
Der große Krieger auf dem Schlachtfeld.mp4
großKriegaufdemSchlachtfeld.wav Hat wer Anregungen wie man an die Sache am besten rangeht ?
|
Lysander
Anmeldungsdatum: 30. Juli 2008
Beiträge: 2669
Wohnort: Hamburg
|
Klingt kompliziert... ich würde denken, dass eine Kombination aus Dateigröße und Kölner Phonetik ein Ansatz sein könnte. Eine zu 100% zuverlässige Lösung wirst Du nicht finden können!
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17622
Wohnort: Berlin
|
Von wieviel Dateien reden wir? Gleiche Dateien mit ähnlichem Namen lassen sich bei der Größe gut an der Größe grob vorsortieren, solange sie die gleiche Codierung haben, was wohl häufig der Fall ist. Sind es viele Dateien, und manuelle Nachkontrolle kommt nicht in Betracht, dann könnte man zur Sicherheit die, mit gleicher Länge, noch mit md5sum auf gleichen Inhalt testen. Bei unterschiedlichen Formaten sehe ich relativ schwarz. Aber nach dem Vorfiltern sollten es weniger Dateien sein, die zu kontrollieren sind. Diese können vielleicht mit einer strengen Benennungsstrategie dann für später weiter vorbereitet werden.
|
Dr1zzt
(Themenstarter)
Anmeldungsdatum: 14. August 2010
Beiträge: 9
|
Naja die Dateianzahl liegt schon so bei 4000, wo halt einzelne Dateien mit unterschiedlicher Kodierung, sprich teilweise 10-30% Varianz in der dateigröße dabei sind. Manuell nachkontrollieren würde ich auf jeden Fall.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13216
|
Wenn Du in der Wikipedia suchst, wirst Du einiges zum Thema finden, z.B.
etc. Ciao robert
|
Dr1zzt
(Themenstarter)
Anmeldungsdatum: 14. August 2010
Beiträge: 9
|
Ich glaube das übersteigt meine Fähigkeiten bei weitem. Aber user unknown hat mich auf eine andere Idee gebracht. Wenn ich mit find nach den Dateien suche, diese dann nach größe sortiere und dann blockweise, sagen wir Suchergebnis 1-15 (oder halt alle 15 Zeilen, den Wert als Variable im script) alphabetisch sortiere, und dann immer eine Leerzeile dazwischen in der Ausgabedatei (zwecks übersicht), müsste ich mit etwas zeitaufwand auch schon einige Dupletten finden. Mein Grundbefehl ist schon mal der hier: find . -type f -printf "%k\t %p\n" 2>/dev/null | sort -rn | awk '{printf("%7.1f GB\t%s\n", ($1/1024)/1024,$0)}'
|
user_unknown
Anmeldungsdatum: 10. August 2005
Beiträge: 17622
Wohnort: Berlin
|
Du könntest auch mehrfach mit size suchen:
| find .... \( -size +300M -and -size -350M \) ...
|
Eventuell sukzessive in Ordner verschieben (300, 350, 400, ...) und dort weiter vergleichen. Mit dem Midnight-Commander kann man zwei Verzeichnisse in Fenstern nebeneinander darstellen, auch 2x das gleiche, und diese nach Größe sortieren. Da findet man gleich große auch leicht.
|
Dr1zzt
(Themenstarter)
Anmeldungsdatum: 14. August 2010
Beiträge: 9
|
Habe mir jetzt etwas zusammengefrickelt und schaue mal ob ich damit einige Treffer lande. Ich weiß effizient ist anders aber meine Fähigkeiten sind begrenzt 😉 #!/bin/bash
#Suche aller Dateien im Verzeichnis, sortierung nach größe, dateinamen ohne pfad in textdatei
find . -type f -printf "%k\t %p\n" 2>/dev/null | sort -rn | awk '{printf("%7.1f GB\t%s\n", ($1/1024)/1024,$0)}' | awk '{$1=$2=$3=""; print $0}' | rev | sed -e 's:\/:ö:g' | awk -Fö {'print $1'} | rev > liste
#Größe der Zeilenblöcke
LINES=25
#Abarbeiten der Textdatei, abhängig von größe der zeilenblöcke, namenssortierung innerhalb der Zeilenblöcke
funktion1() {
cat liste | sed "$LINES"q | sort >> liste2
echo "" >> liste2
sed "1,$LINES"d"" liste > liste.tmp
cat liste.tmp > liste
rm liste.tmp
funktion2
}
#Prüfung ob Ursprungstextdatei noch Text enthält, wenn nein löschen der Listen und erstellung einer eindeutig identifizierbaren Endliste (enthält Datum+Zeit im Dateinamen)
funktion2() {
if [ -s liste ]
then
funktion1
else
cat liste2 > $(date +%Y%m%d%H%M%S)liste.txt
rm liste2
rm liste
echo "Durch"
exit 0
fi
funktion1
}
funktion2
|
x-haui
Anmeldungsdatum: 18. September 2007
Beiträge: 111
|
Hallo, eine weitere Möglichkeit wäre, dass du mal schaust ob dir agrep weiterhilft. Folgendes Script entfernt zunächst die Dateiendungen aus der Dateiliste und schreibt sie in eine zweite Datei. Dann wird für jede Zeile die Anzahl der Whitespaces, Binde- und Unterstriche ermittelt. Die Summe daraus plus ein weiterer Faktor (n) geben dann an, wie "weit" eine Zeile von der aktuellen abweichen darf um noch als Treffer zu gelten. Das funktioniert zumindest für einige Zeilen relativ gut, hat aber natürlich z.B. Probleme bei Zeilen die plötzlich ein ganzes neues Wort enthalten.
#!/bin/bash
n=2
while read l; do
echo "${l%\.[^.]*}"
done < "$1" > "${1}_tmp"
while read l; do
wscount=$(egrep -o "\s" <<< "$l" | wc -l)
dashcount=$(grep -o -- "-" <<< "$l" | wc -l)
uscount=$(grep -o -- "_" <<< "$l" | wc -l)
echo "Matches for '$l'"
agrep -i -E "$((wscount + dashcount + uscount + n))" -k "$l" "${1}_tmp"
echo ""
echo ++++++++++++
echo ""
done < "${1}_tmp"
Nachteil in diesem sehr einfachen Script ist auch, dass die die Ergebnisse ohne Dateiendung angezeigt werden, aber das kann man ja ggf noch ergänzen.
|
microft
Anmeldungsdatum: 6. August 2009
Beiträge: 454
Wohnort: Norddeutschland
|
Das würd ich lassen! "We_will_rock_you.mp3" von Queen ist was völlig anderes wie "We_will_rock_you.mp3" von Evian. http://www.dailymotion.com/video/xsph4_we-will-rock-you-the-water-pub-evia_music Der Zugriff auf die Metadaten macht dich auch nicht schlauer. Siehe "Varius" 😉 cu
|