Daten Vergleich

freEze

freEze

Jungspund
hallo,
ich soll ein script schreiben in unix und hab keine ahnung davon.
das script soll im verzeichnis gleich große daten suchen(doppelte) und die eine dann löschen.

kann mir jemand helfen??


hab bisjetzt nur das
find . -name "*" -exec ls -ld {} \; >ausgabe.txt
 
Zuletzt bearbeitet:
Hallo
Was willst du vergleichen, die Inhalte ( Daten) oder die Dateien?
Wenn du etwas genauer die Aufgabe definieren kannst, kann ich dir eventuell helfen.
Gruß Wolfgang
 
freEze schrieb:
hallo,
ich soll ein script schreiben in unix und hab keine ahnung davon.
das script soll im verzeichnis gleich große daten suchen(doppelte) und die eine dann löschen.

"in unix" ist ziemlich unspezifisch. es könnte sein /bin/sh /bin/bash /usr/bin/perl /usr/bin/python oder sogar /usr/bin/php

ich würde dafür mal perl oder python empfehlen. bash geht zwar auch, damit bin ich aber net so fit.

also: bist du auf eine sprache festgelegt ?
 
Um keine Wissenschaft draus zu machen, kannst Du Dir md5-Checksummen zu den Files ausrechnen lassen und vergleichen. Eventuell Skript bei dem OS-abhängigen "md5sum"-Befehl anpassen.

Code:
#!/usr/bin/perl

use File::Find;

my %files;
my %find_options = (wanted => \&compare_files, no_chdir => 1);
find (\%find_options, '.');

##################
sub compare_files {
	if ((-f $_) && (-s $_) && !(-l $_)) {
		open (MD5SUM, "md5sum \'$_\' |");             # eventuell anpassen
		my ($md5sum) = split (/\s+/, <MD5SUM>, 0);    # eventuell anpassen
		close MD5SUM;
		if ($files{$md5sum}) {
			unlink $_;
			print "\t$_ removed\n"
		} else {
			$files{$md5sum} = $_
		}
	}
}

Gruss, Phorus
 
also bis jetzt hab ich das

# !/bin/ksh
find . -name "*" -type f -exec ls -d {} \; | grep -v Gesamt >temp.txt
while read name
do
sumerg=`sum "$name" | awk ' { print $1,$2 } ' `
groesse=`wc -c "$name" | awk ' { print $1 } ' `
echo "$groesse $sumerg $name"
done < temp.txt | sort -nr > ausgabe.txt


jetzt fehlt nur das er in der ausgabe.txt die ersten beiden spalten vergleicht werden mit anderen werten in der txt. wenn da irgendwo gleiche werte sonst wo stehen soll die eine gelöscht werden.

vielleicht schafft das ja jemand zu beenden


vielen dank
 
um auch in untergeordneten ordnern doppelt vorhandende dateien aufzuspueren, kannst du auf teilstrings mittels md5sum und uniq pipen:
Code:
find -type f -print0 | xargs -0 md5sum |sort |uniq -w 32 -D
so sparst du den ganzen tmp.txt-muell. die ausgabe kannst du auch in eine datei z.b. mit tee umleiten. von einem automatischen loeschen rate ich ab, es hat schon ab und an seinen sinn, dass einige dateien an mehreren orten vorhanden sind oder die selbe md5sum haben :>

viel erfolg.
 
kannst du mir mal erklären wie ich das jetzt in mein script rein baue??? :hilfe2:

wäre echt nett von dir!!!
 
mit dem deldopp script komm ich überhaupt nich klar.

ich meinte das mit dem rein bauen so das du mal bitte

die zeile find -type f -print0 | xargs -0 md5sum |sort |uniq -w 32 -D von dir

in meins irgendwie reinbaust das es funktioniert

das wäre echt nett
 
kannste das nich schnell machen wenn es einfach ist.

kennst dich doch damit aus.

hab schon lange gebraucht, bis ich den text den ich jetzt habe, zusammen gekriegt habe und der auch funktionfähig ist.

bloß jetzt mit dem das er die ersten 2 spalten nach gleichen werten durchsucht und die vergleich komm ich nich klar
 
Sali Freeze

Bist du hier, um uns einen Auftrag zu geben oder willst du etwas lernen? Mit zusammenkopieren von Kommandozeilen gehst du nur ein sehr grosses Risiko ein und kannst deine Handlungen/dein Script nicht erklären wenn du es jemandem abgeben musst.

Wir helfen dir gerne deine Fragen bzgl. Shellscripting zu beantworten, aber viele von uns haben nicht gerade Lust deine Arbeit zu schreiben was ja verständlich sein sollte.

Gruss
Joel
 
ich will es ja keinem erklären

hab doch schon nen anfang vorgegeben

jetzt müsste nur einer das ende übernehmen
 
*kopfschüttel*

Everybody's darling is everybody's asshole
 
freEze schrieb:
ich will es ja keinem erklären

hab doch schon nen anfang vorgegeben

jetzt müsste nur einer das ende übernehmen


ich hab immer noch net verstanden was dein script überhaupt machen soll und auf welche umgebung / sprachen du festgelegt bist.
 
Ist doch nicht so schwer zu verstehen. Es muss mit

Code:
# !/bin/ksh
find . -name "*" -type f -exec ls -d {} \; | grep -v Gesamt >temp.txt
while read name
do
sumerg=`sum "$name" | awk ' { print $1,$2 } ' `
groesse=`wc -c "$name" | awk ' { print $1 } ' `
echo "$groesse $sumerg $name"
done < temp.txt | sort -nr > ausgabe.txt

reinfummel: find -type f -print0 | xargs -0 md5sum |sort |uniq -w 32 -D

beginnen und dann muss noch was hinten dran...

;)
 

Ähnliche Themen

Hilfe für ein shell script

Welches Linux/Unix für ehemaligen OSX Nutzer?

Shell Skript beschleunigen

Benötige Hilfe- Dateien vergleichen

Samba Datentransfer bricht ab

Zurück
Oben