PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Brauche Dringend Hilfe !!!!!!!!!!!!!!!!!!



20-03-2001, 23:05
Hallo. dieses Problem habe ich schon ohne erfolg in Spotlight.de unter Linux gestellt.
Ich hoffe hier entrprechende hilfe zu bekommen

ich hatte gestern einen Plattencrash !!!!!!!!!!! :-(

Folgendes Problem:

Nach dem ich den Rechner neu gestartet habe und mit e2fsck einen teil meiner Daten (nicht Betriebssystem, liegt gott sei dank auf einer anderen Platte) retten konnte, sind einige Dateien defekt, obwohl sie die gleiche Dateigröße und Datum haben wie auf dem Backup.
Backup von Freitag habe ich auf eine andere Platte kopiert.
Kaputter Bereich ist in "/home"
Datensicherung von Freitag ist in "/home1"

Jetzt möchte ich sämtliche Daten wieder zurückkopieren die seit der Datensicherung nicht geändert wurden.
Mit "cp -a -u" geht es nicht, da ja nur Dateien kopiert werden die nicht neuer sind als das Backup, die Dateien die gleiche Länge und gleiches Datum haben werden nicht überschrieben.
Mit tar habe ich es auch schon versucht, gleiches Ergebniss
Ich bräuchte ein script, das mir alle Dateien kopiert, die seit Freitag nicht mehr verändert wurden.

PS: kann kein Perl, also BITTE nicht nur eine Anleitung wie gehen könnte, sondern möglichst eine Lösung.

21-03-2001, 01:58
Hi,

kann auch kein Perl aber mit der bash + utils geht das auch.

Nennen wir folgendes Skript cp_equal.sh


#!/bin/bash
FILE=/home/jgbauman/unsorted/trash/test/home/$1
BACKUP=/home/jgbauman/unsorted/trash/test/home1/$1

if test ! -e $BACKUP; then
echo $BACKUP doesn´t exist
exit
fi
if test ! -e $FILE; then
echo $FILE doesn´t exist
exit
fi
# not newer ...
if test ! $FILE -nt $BACKUP ; then
# ... and not older ...
if test ! $FILE -ot $BACKUP ; then
# ... means the same time
# get sizes
S1=`wc -l $FILE | cut -f1 -d" " `
S2=`wc -l $BACKUP | cut -f1 -d" "`
# test, don´t know if neccessary
if test ! $S1 = $S2; then
# these file perhaps need manual checking
echo same time, but differ in size: $BACKUP and $FILE;
#comment out following line if you want to copy them regardlessly
exit
fi
#equal size
#echo the action
echo copying $BACKUP to $FILE
ls -l $BACKUP
ls -l $FILE
echo
#uncommet this for the real action
#cp -a $BACKUP $FILE

fi
fi

Liegt es im Pfad und ist ausfuehrbar, dann kannst Du es mit

cd /home1
find . -type f -exec cp_equal.sh \{\} \;

auf alle Dateien unter /home1 loslassen.

Der eigentliche cp Befehl ist erst mal auskommentiert, damit die testen kannst ob's auch das ist was Du willst.
Auch werden Dateien mit gleichen Datum, aber unterschiedlicher Laenge gesondert behandelt.

Also erst mal testweise Laufen lassen und dann entscheiden ob es das ist was du brauchst.

21-03-2001, 02:57
Vielen Dank für das Script.
habe nur ein RIESEN Problem mit den Copy Befehl.
Leider sind auch Dateien mit Leerzeichen in Dateiname dabei, und dei werden dann falsch erkannt.
Habe es schon mit " ' ´ und ` Versicht aber nicht geht.
Lasse es als in einer bash laufen.

EJ Radim
21-03-2001, 11:55
Servus Christoph!

Probier´s mit \ und /!
Wie das genau hinhaut, kannst du mit der TAB-Taste herausfinden. Erstelle in der grafischen Oberfläche unter / ein Verzeichnis mit einem Leerzeichen (Beispiel Verzeichnis).

Geh in einen Terminal und tipp folgendes ein:
cd Beis --> drücke anschließend die TAB-Taste. Es sollte dann der Verzeichnisname automatisch ergänzt werden. Dass sollte dann ungefähr so aussehen:
cd Beispiel\ /Verzeichnis

Eigentlich sollte das auch mit Dateien funktionieren.

greetings,
Schorschi

PS: In deinem letzten Posting hast du ein mehr oder weniger wichtiges Wort in der letzten Zeile vergessen! http://www.linuxforen.de/ubb/wink.gif


[Dieser Beitrag wurde von EJ Radim am 21. März 2001 editiert.]

pitu
21-03-2001, 13:42
Wie waere es mit:

cd /home1
tar cSpf ./ | (cd /home ; tar --newer=<datum> -xvSpf -)

Damit kopierst du alle Dateien, die "neuer" sind als Datum.

thorsten

------------------
Thorsten Wandersmann
SuSE GmbH, Nuernberg

21-03-2001, 14:41
Nützt nur leider nichts, denn es waren ja nach dem Absturz Dateien vorhanden mit gleichem Datum und gleicher Dateilänge, aber falschem Inhalt !

Gruß Christoph

pitu
21-03-2001, 17:52
Du hattest nur gesagt

Ich bräuchte ein script, das mir alle Dateien kopiert, die seit Freitag nicht mehr verändert wurden.

Aber du hast recht, der Teil geht damit natuerlich nicht. Hatte den oberen Teil:

Jetzt möchte ich sämtliche Daten wieder zurückkopieren die seit der Datensicherung nicht geändert wurden.

ueberthorsten

------------------
Thorsten Wandersmann
SuSE GmbH, Nuernberg

22-03-2001, 00:48
#!/bin/bash
FILE=/home/${1/ /\\ }
BACKUP=/home1/${1/ /\\ }

Aendere die ersten beiden Zeilen, dann sollte es klappen

22-03-2001, 00:53
HEUREKA!
und Entschuldigung für die vielen Schreibfehler in dem letzten Beitrag, aber ich habe gestern Nacht bis 3:00 Uhr über diesem Problem gebrütet, und bin um 6:00 Uhr reichlich übermüdet wieder aufgestanden. ;-)

Das Ganze Geheimnis ist die richtige plazierung der Anführungszeichen.

Hier mein Script wie es geht :-)
->
#!/bin/bash
# /root/bin/cpold
# $1 = alte Verzeichniss /home1
# $2 = neues Verzeichniss /home
cd /root/bin
if test ! -d "$2" ; then
echo "$2 ist kein Verzeichniss"
exit 1
elif test ! -d "$1" ; then
echo "$1 ist kein Verzeichniss"
exit 1
fi
for i in "$1"/* ; do
Datei=`basename "$i"`
if test -d "$1"/"$Datei" ; then
if test -d "$2"/"$Datei" ; then
echo "Verzeichniss $1/$Datei ist OK"
/root/bin/cpold "$1"/"$Datei" "$2"/"$Datei"
else
echo "Verzeichniss $2/$Datei fehlt und wird kopiert"
cp -a "$1"/"$Datei" "$2"/"$Datei"
fi
elif test -f "$1"/"$Datei" ; then
if test "$2"/"$Datei" -nt "$1"/"$Datei" ; then
echo "Datei $1/$Datei ist neuer als $2/$Datei"
else
if test -e "$2"/"$Datei" ; then
echo "Datei $2/$Datei wird ueberschrieben"
else
echo "Datei $2/$Datei fehlte und wird kopiert"
fi
cp -a "$1"/"$Datei" "$2"/"$Datei"
fi
fi
done

->
Ich habe den Fehler gemacht und bei den copy Befehlen folgendes Format gehabt - cp -a "$1/$Datei" - so kam es immer zu Fehlern!

DANKE FÜR EURE HILFE, ich habe jetzt fast alles wieder !!
Christoph