URL: https://www.overclockers.at/applications/req-inverse-duplicat-suche_228178/page_1 - zur Vollversion wechseln!
Ich bin auf der Suche nach einem Programm (vorzugsweise Linux), mit dem ich folgendes Szenario abdecken kann:
Ich hab auf meinem Server haufenweise Serien/Backups usw.
Auf diversen externen Festplatten liegen wahrscheinlich auch noch Teile herum, welche schon am Server gesichert sind.
Jetzt bräucht ich halt was, was mir sagt was von Festplatte X noch NICHT auf dem Server ist.
Problem dabei: Die Ordner und Unter-Ordner heißen großteils UNTERSCHIEDLICH auf Festplatte und Server. Selbiges gilt für Dateinamen.
Vergleich müßte halt auf CRC/MD5 basis laufen.
Hab schon selber etwas herumgecoded, aber mein Ansatz ist bis jetzt wenig performant und ich hab auch momentan keine Zeit dazu da mehr zu machen.
Vielleicht weiß ja jemand was!
TIA
ok kennt auch keiner was... schade
Quelle1: MD5 Checksums einlesen und in eine Textdatei ausgeben.
Quelle2: MD5 Checksums einlesen und in eine Textdatei ausgeben.
...
Textdateien vergleichen und Differenzen in eine Textdatei ausgeben.
Mehr dazu hier:
http://www.explananda.com/2008/05/1...-for-wildcards/
HTH
Thread erst jetzt gesehen bzw. gezeigt bekommen, und muss sagen: Das ist jetzt so schwer aber nicht?
(ungetestet)
Code:export LC_ALL=C find /path1 -type f -exec md5sum {} +| sort -n > path1.txt find /path2 -type f -exec md5sum {} + | sort -n > path2.txt comm -1 -3 path1.txt path2.txt #files, die in path2 sind, aber nicht in path1


Zitat von COLOSSUSThread erst jetzt gesehen bzw. gezeigt bekommen, und muss sagen: Das ist jetzt so schwer aber nicht?
(ungetestet)Code:export LC_ALL=C find /path1 -type f -exec md5sum {} +| sort -n > path1.txt find /path2 -type f -exec md5sum {} + | sort -n > path2.txt comm -1 -3 path1.txt path2.txt #files, die in path2 sind, aber nicht in path1
Reicht dir das?
Edith ruft noch: das ist in etwa das, was mrnice vorgeschlagen hat. Aber halt loeffelbarer
Edith ruft NOCHMALS: Ist so noch nicht ganz fertig - die Dateien beinhalten ja sowohl die Pruefsummen, als auch die relativen Pfade der Dateien. Du musst also path1.txt und path2.txt nochmal weiterverwursten, indem du nur die md5sums rausholst (`awk '{print $1}'`), und dann den Vergleich mittels `comm` ueber diese Files laufen laesst. Die resultierenden Pruefsummen kannst du mit den urspruenglichen Files ("path1.txt" und "path2.txt") wieder zu Pfadinformationen "mappen". Ich kann dir gerne dabei helfen, aber nicht jetzt

so, alle schritte durch. musste die md5-datein noch sorten und dann konnt ich "comm" verwenden.
jetzt fehlt nurnoch die Dateinamen aus der "originaldatei" ("path1") heraus zu holen.
gibts da auch einen netten Einzeiler:
stells mir ca. so vor:
awk 'awk '{print}' diff.txt {print $1}' extern.txt
morgen nochmal drüber schaun wie das funkt
ich merks mal wieder was für ein bash schwammerl ich bin :P
edit: join kanns 
Ah, sehr schoen - ich entnehme dem Thread, dass du das Problem inzwischen geloest hast? 
Ja ist mittlerweile behoben (denk ich ) 
Danke nochmal. Hab mir ein kleines Script gebastelt dass ich euch natürlich ned vorenthalten will. (bitte nicht gleich lynchen ist glaub ich das 1. halbwegs sinnvolle Script ...)
Code:#!/bin/bash #filename=$(basename $1) #extension=${filename##*.} #filename=${filename%.*} export LC_ALL=C DIFF="diff.txt" MISSING="missing_files.txt" function testing { echo "this is just for testing" } function md5 { if [ $# != 2 ]; then echo "Usage: $0 --md5 PATH NAME_OF_DEVICE" exit fi path=$1 if [ ! -d "$path" ]; then echo "Error: $path does not exist"; exit; fi dirname=$(basename $1) device=$2 filename=${device}_${dirname} find $path -type f -exec md5sum {} +| sort > $filename.txt awk '{print $1}' $filename.txt | sort > $filename\_md5.txt } function compare { if [ $# != 3 ]; then echo "Usage: $0 -c MD5_FILE1 MD5_FILE2 FILE_WITH_FILENAMES" echo "check for files which are in file2 but not in file1" exit fi if [ ! -f "$1" ] || [ ! -f "$2" ] || [ ! -f "$3" ]; then echo "One File does not exist" exit fi #echo $1 $2 comm -13 $1 $2 > $DIFF join $DIFF $3 | awk -F " " '{print}' > $MISSING } case "$1" in -c) shift compare $@ ;; --md5) shift md5 $@ ;; --test) shift testing $@ ;; *) echo "blubb" exit;; esac
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025