Sie sind nicht angemeldet.

1

19.04.2010, 16:03

Dateien gleicher Größe finden

Grüß Gott alle zusammen !
Ich hab (schon wieder) ein kleineres Anfängerproblem beim Skriptschreiben bei dem ich dummerweise bis jetzt keinen richtigen Aufhänger für Tante Google gefunden habe. Folgende Situation : in zwei gut gefüllten Ordnern habe ich einige wenige Text- und Bilddateien, die inhaltlich identisch sind, aber verschiedene Namen haben.
Um die überprüfen zu können, möchte ich mir ein Skript erstellen, das mir die Namen der Dateien gleicher Größe aus den beiden Ordnern in eine Datei schreibt.
Das ist der derzeitige Stand der Versuche :

Quellcode

1
2
3
4
5
6
7
8
9
#!/bin/sh
echo > tmp2;
for i in /home/user/testdir1/*;
     do ls -l $i | cut -b 26-31, 68- | read sz nm; 
     find /home/user/testdir2/ -size ${sz}c -fprint tmp1;
     cat  echo $nm tmp2 tmp1 > gleich;
     rm tmp1; cp gleich tmp2
done
rm tmp2


Fehlermeldung ist : Unbekanntes Argument für -size
Offensichtlich scheitert es schon mal daran, daß der read Befehl nicht das macht,was ich mir vorgestellt habe. Die Ausgabe des cut Befehls auf den Bildschirm klappt zwar, ein echo $sz aber schon nicht mehr. Da habe ich anscheinend einige Verständnisprobleme mit dem Pipelining bzw. den cut und read Befehlen.
Auch die cat Zeile sieht für mich noch ziemlich wackelig aus. Könnt ihr mir da einen Tipp geben ?

Eigentlich vermute ich, daß das ganze Problem auch viiiiiiel einfacher zu lösen ist, aber was ich bisher gelesen und ausprobiert habe (mit test oder sort z.B.) scheint alles nicht ganz zu gehen.

Bin wie immer für jede Anregung dankbar !
delix

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »delix« (19.04.2010, 16:05)


2

19.04.2010, 16:55

ach ja noch was :
fdupes, ein Perlskript und die Debian anleitung

Quellcode

1
find . -exec md5sum {} 2>/dev/null \; | sort | uniq -w 32 -D > doppelte.asc


habe ich gefunden, die arbeiten aber alle mit der md5sum. Geht das denn wirklich nicht durch einen normalen einfachen Größenvergleich ?

3

19.04.2010, 20:43

Zitat

Original von delix
Geht das denn wirklich nicht durch einen normalen einfachen Größenvergleich ?
Nur so halb. Je nachdem, was Du für Daten hast, könnten sie schonmal gleich groß sein, obwohl der Inhalt gleich ist. Da hilft ein Prüfsumme oder das "cmp"-Programm. Diese anderen Ansätze wollen es halt gleich richtig machen, da ist es besonders unwahrscheinlich, dass es False-Positives gibt.

4

19.04.2010, 21:35

mir ist schon klar, daß das die saubereren Methoden sind. Aber wenn ich das auf dem schwachen Rechner laufen lasse rödelt der sich ja zu Tode. Und ich muß mir die gefundene Dateien eh noch mal ansehen, bevor ich die Duplikate dann wirklich lösche.

Nur seh ich momentan den Fehler im Skript eben nicht.

5

20.04.2010, 20:55

Wenn in /home/user/testdir1/ weniger Dateien drin sind, kannst Du gern diese kranke Befehlszeile benutzen:

Quellcode

1
find /home/user/testdir1/ -type f -exec bash -c 'find /home/user/testdir2/ -type f -size $(stat -c %s "{}")c -exec echo "{} => $(echo -n '{'; echo -n '}')" \;' \;
Ohne Gewähr.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »oziris« (20.04.2010, 20:55)


6

21.04.2010, 18:20

Danke, werde ich ausprobieren.

Ich denke, ich weiß jetzt auch wo der Fehler in dem Skript liegt : Standardausgabedevice von cut ist der Bildschirm, Standardeingabe für read ist die Tastatur.

Ich habe die Aufgabe an sich inzwischen mit dem Debianskript erledigt; wenn man alles schließt und nur die Konsole benutzt, ist der Zeitaufwand durchaus akzeptabel - auch auf der alten Krücke =D

Ich denke, der Thread kann als gelöst geschlosssen werden.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »delix« (21.04.2010, 18:22)


Thema bewerten