Mailinglist Archive: opensuse-de (6694 mails)

< Previous Next >
Re: Verzeichnisse vergleichen
  • From: Juergen Schwarting <Juergen_Schwarting@xxxxxx>
  • Date: Mon, 14 Jan 2002 00:11:17 +0100
  • Message-id: <20020114001117.A6547@xxxxxxxxxxx>
Hallo Christian,

* Am 10.01.2002 um 23:13 Uhr schrieb Christian Boltz:
ich suche ein Programm, um Verzeichnisinhalte (incl. Unterverzeichnisse)
abzugleichen.

Bezüglich des Abgleichs habe ich einen Spezialwunsch:

Neue und geänderte Dateien sollen in ein drittes Verzeichnis kopiert werden
(z. B. um davon eine CD zu brennen oder das ganze per Diskette auf einen
anderen Rechner zu kopieren).

Also nach dem Motto: vergleiche die Verzeichnisse ~/dir1 mit ~/dir2 und
schreibe neue/geänderte Dateien nach ~/changes

Gibt es da irgendwas passendes?

keine Ahnung, aber hier ein kleines Script, dass diese Aufgabe
erledigen sollte:


---[ schnipp ]---
#!/bin/bash

ALTDIR=~/dir1 # Altes Verzeichnis
NEUDIR=~/dir2 # Neues Verzeichnis

CHANGEDIR=~/changes # Hierher werden Änderungen kopiert

TMP=/tmp # Wo befinden sich die temp. Dateien
TMP1=$TMP/index1 # Index für das Altverzeichnis
TMP2=$TMP/index2 # Index für das Neuverzeichnis
TMP3=$TMP/index3 # Index aller eindeutigen Verzeichnisse


# ggf. Index1 löschen
if [ -e "$TMP1" ]; then
rm $TMP1
fi

# Index des Altverzeichnis aufbauen
find $ALTDIR -type f |
while read Zeile; do
CheckSum=$(md5sum -b "$Zeile")
echo "A $CheckSum"
done >>$TMP1

# ggf. Index2 löschen
if [ -e "$TMP2" ]; then
rm $TMP2
fi

# Index des Neuverzeichnis aufbauen
find $NEUDIR -type f |
while read Zeile; do
CheckSum=$(md5sum -b "$Zeile")
echo "N $CheckSum"
done >>$TMP2

# Index mit eindeutigen Dateien aufbauen
cat $TMP1 $TMP2 | sort +1 -32 | uniq -u -s 1 -w 32 >$TMP3


# Alle eindeutigen Kandidaten etwas genauer unter die Lupe nehmen ;-)
while read Zeile; do
Satzart=$(echo "${Zeile:0:1}") # Satzart ermitteln

if [ "$Satzart" == "N" ]; then # Nur Neuzugänge/Änderungen verarbeiten
Datei=$(echo ${Zeile#*\*}) # Zugriffspfad extrahieren
cp --parents "$Datei" $CHANGEDIR/ # Datei ins Change-Verzeichnis kopieren
fi
done <$TMP3

# Temp. Dateien löschen
rm $TMP1 $TMP2 $TMP3
---[ schnapp ]---


Das Ausschmücken und die Fehlerbehandlung überlasse ich Dir ;-)
Da hier mit Hilfe von Checksummen gearbeitet wird, interessieren
die Dateinamen und Zugriffszeiten nicht. Nur der reine Datei-
inhalt wird verglichen. Das hat allerdings zur Folge, dass Dateien
mit dem selben Inhalt aber unterschiedlichen Namen als identisch
anerkannt und nicht kopiert werden. Hier ist vielleicht noch ein
wenig Nacharbeit erforderlich.



Jürgen

--
Hast Du Zweifel, lass es ueberzeugend klingen.
/ Registered Linux-User #130804 http://counter.li.org \
\ Linux Stammtisch Bremerhaven http://linux.hs-bremerhaven.de /

< Previous Next >
References