Moin Moin,
ich hätte da gern mal wieder ein Problem...
Ich will zwei Verzeichnisse vergleichen und die geänderten Dateien in ein 3tes Verzeichnis kopieren. Dazu fiel mir nichts besseres als rsync ein. Folgendes hab ich jetzt soweit zusammen:
Macht jetzt erstmal nur für ein Verzeichnis, sollen aber mehr werden. Funktioniert soweit, gefällt mir aber nicht aus folgenden Gründen:
Erstens kommt mir im if zu häufig das Gleiche vor, ich würde wesentlich lieber nur die Pattern per ODER angeben
Zweitens betreibe ich hier nur globbing und kein patternmatching, schöner wäre es auf "Zeile beginnt mit " zu testen
Drittens würde ich den Ausdruck negieren wollen um then und else in einer verständlicheren Reihenfolge zu haben
Letztlich sollte sowas raus kommen:
WENN $blubb NICHT mit "sending" BEGINNT ODER mit sent BEGINNT ODER mit ./ BEGINNT DANN kopiere
Aber egal ob ich mich mit -ne oder !=, mit einfachen runden Klammern oder halt den jetzt verwendeten doppelten eckigen versucht hab, bin ich immer wieder grandios an der Kombination NICHT, regulärer Ausdruck, ODER gescheitert.
Letzter Ausweg für mich wäre jetzt die Ausgabe von rsync in eine temporäre Datei zu leiten, die Zeilen die nicht Dateinamen enthalten per sed durch nichts zu substituieren, über diese Datei mittels for zu iterieren um das Kopieren zu machen und am Ende die Datei wieder zu löschen. Aber das muß doch auch so über eine Variable gehen...
ich hätte da gern mal wieder ein Problem...
Ich will zwei Verzeichnisse vergleichen und die geänderten Dateien in ein 3tes Verzeichnis kopieren. Dazu fiel mir nichts besseres als rsync ein. Folgendes hab ich jetzt soweit zusammen:
Code:
if [ ! -e /sicherung-$1 ]
then
mkdir /sicherung-$1
else
echo "Dieses Verzeichnis wurde hier schon gesichert!"
exit 1
fi
IFS=$'\n'
for blubb in `rsync -avn /test-zu-sichernd/ /test-orig/`
do
if [[ $blubb =~ 'sending incremental' ]] || [[ $blubb =~ 'sent ' ]] || [[ $blubb =~ './' ]] || [[ $blubb =~ 'total size is' ]]
then
continue
else
cp /test-zu-sichernd/$blubb /sicherung-$1/$blubb
fi
done
Erstens kommt mir im if zu häufig das Gleiche vor, ich würde wesentlich lieber nur die Pattern per ODER angeben
Zweitens betreibe ich hier nur globbing und kein patternmatching, schöner wäre es auf "Zeile beginnt mit " zu testen
Drittens würde ich den Ausdruck negieren wollen um then und else in einer verständlicheren Reihenfolge zu haben
Letztlich sollte sowas raus kommen:
WENN $blubb NICHT mit "sending" BEGINNT ODER mit sent BEGINNT ODER mit ./ BEGINNT DANN kopiere
Aber egal ob ich mich mit -ne oder !=, mit einfachen runden Klammern oder halt den jetzt verwendeten doppelten eckigen versucht hab, bin ich immer wieder grandios an der Kombination NICHT, regulärer Ausdruck, ODER gescheitert.
Letzter Ausweg für mich wäre jetzt die Ausgabe von rsync in eine temporäre Datei zu leiten, die Zeilen die nicht Dateinamen enthalten per sed durch nichts zu substituieren, über diese Datei mittels for zu iterieren um das Kopieren zu machen und am Ende die Datei wieder zu löschen. Aber das muß doch auch so über eine Variable gehen...