2009-01-04 5 views
5

Ich habe diesen Bash-Skript meinen Backup auf eine externe Festplatte läuft ... nur wenn das Laufwerk montiert ist (O X):Wie richte ich rsync so ein, dass es nur ausgeführt wird, wenn das Zielverzeichnis existiert?

DIR=/Volumes/External; 
if [ -e $DIR ]; 
then rsync -av ~/dir_to_backup $DIR; 
else echo "$DIR does not exist"; 
fi 

Dies funktioniert, aber ich spüre, ich bin Verlesen der rsync Manpage. Gibt es eine eingebaute rsync-Option, um den Lauf abzubrechen, wenn das Zielverzeichnis der obersten Ebene nicht existiert? Ohne das Vorhandensein von/Volumes/External zu testen, wird ein Verzeichnis mit diesem Namen erstellt, wenn es nicht bereits gemountet ist.

Antwort

3

Diese beiden Fahnen aussehen wie das, was Sie suchen:

--existing, --ignore-non-existing 

Aus der Manpage:

--existing, --ignore-nicht-vorhandene
Dies teilt rsync Überspringen von Dateien (einschließlich Verzeichnissen), die noch nicht auf dem Ziel vorhanden sind. Wenn diese Option mit der Option --ignore-existing kombiniert wird, werden keine Dateien aktualisiert (was nützlich sein kann, wenn Sie nur überflüssige Dateien löschen wollen).

+0

mit --existing, seine neuen Verzeichnisse in der Quellhierarchie werden nie auf dem Backup-Laufwerk erstellt werden ... – mjy

+1

Ja, das sind die Optionen, die ich nicht scheinen kann, um auf die Art zu arbeiten, wie ich sie will. Auch wenn der Lauf abgebrochen wird, weil das Zielverzeichnis nicht existiert, wird das Zielverzeichnis erstellt (obwohl die Struktur nicht kopiert wird). – Marcus

2

AFAIK nein, aber Sie behavour mit einem Schrägstrich simulieren können:

rsync -av dir_to_backup /Volumes/External/;

Es wird mit einem Fehler beendet, wenn das Verzeichnis nicht vorhanden ist (was nicht erwünscht sein kann oder nicht) .

Auch können Sie jederzeit optimieren weg das, wenn:

test -e $DIR && rsync -av ...

+1

Ich finde die erste Aussage nicht wahr. Das Verzeichnis wird unabhängig vom nachfolgenden Schrägstrich erstellt. Ich mag die Shell-Optimierung für den Existenztest, außer dass ich eine Fehlerausgabe möchte, wenn das Verzeichnis nicht existiert, also werde ich es wahrscheinlich ausführlich halten. – Marcus

1

Nein, es scheint nicht eine solche Option zu sein, soweit ich von der Man-Page sehen.