staging.inyokaproject.org

rsync: Datenauswahl für die Sicherung

Status: Gelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

jolexin

Avatar von jolexin

Anmeldungsdatum:
22. Dezember 2009

Beiträge: Zähle...

Seit ca einer Woche versuche ich vergeblich, mit rsync einige meiner verborgenen Dateien und Ordner zu sichern, z.B.

~/.profile 
~/.config/...
aber nicht 
~/.cache/... 

Ich habe (1) mit grsync versucht, eine geeignete rsync-Befehl zu erzeugen, habe (2) mit "man rsync" vergeblich die Anleitung rauf und runter studiert. Ich bin wahrscheinlich zu blöd!

Ich habe mit der Option rcopy --dry-run vegeblich versucht, die gewünschten Dateien und Ordner auszuwählen. Ich habe keine Idee, wie das quellpattern und die Einträge in der excluded-from Datei aussehen sollten, damit ich genau die erwünschten Ordner und Daten sichere und die unerwünschten überspringe.

Als Quellpattern habe ich u.a. versucht:

$HOME/.* Damit werden alle Dateien und Ordner aus meinem Home Ordner ausgewählt - also viel zuviel
$HOME/\.* Damit werden alle Dateien und Ordner namens .xxx übersprungen - also gerade die, die ich sichern will
$HOME/^.* /home/jj/^." failed: No such file or directory
$HOME/.config Darauf erscheint: skipping directory .config

Als excluded-Pattern habe ich versucht:

./cache

Unklar ist mir auch, ob ich absolute Pfadnamen angben muss oder relative in Bezug auf meinen $HOME Ordner

Hier einer meiner vielen Befehle:

1
rsync --dry-run -al --log-file=/media/datsi/Alle-Datsi/Sich-Lapis/mit-rsync-ab-2017-09/rsync-log-jj-vbg   --exclude-from=/media/datsi/Alle-Datsi/Sich-Lapis/mit-rsync-ab-2017-09/rsync-exclude-jj-vbg   $HOME/.*   /media/datsi/Alle-Datsi/Sich-Lapis/mit-rsync-ab-2017-09/jj-verborgen

Was muss ich tun, damit ich weiterkomme?

ThomasKrichel

Anmeldungsdatum:
25. März 2011

Beiträge: Zähle...

Versuche mal, ob es mit folgendem funktioniert:

1
rsync --dry-run -al --log-file=/media/datsi/Alle-Datsi/Sich-Lapis/mit-rsync-ab-2017-09/rsync-log-jj-vbg   --exclude-from=/media/datsi/Alle-Datsi/Sich-Lapis/mit-rsync-ab-2017-09/rsync-exclude-jj-vbg   $HOME/.[^.]*   /media/datsi/Alle-Datsi/Sich-Lapis/mit-rsync-ab-2017-09/jj-verborgen

swkh

Anmeldungsdatum:
10. April 2015

Beiträge: 610

jolexin schrieb:

Seit ca einer Woche versuche ich vergeblich, mit rsync einige meiner verborgenen Dateien und Ordner zu sichern, z.B.

~/.profile 
~/.config/...
aber nicht 
~/.cache/... 

Ich habe für diesen Zweck eine exclude-Datei angelegt. Sie befindet sich im Ordner /home/USERNAME/.grsync. In meinem Fall hat die Textdatei den Namen exclude und folgenden Inhalt:

.Trash
.cache
.thumbnails
.gvfs
.dbus

Getestet habe ich natürlich mit grsync (dry run). Funktioniert wie gewünscht.

jolexin

(Themenstarter)
Avatar von jolexin

Anmeldungsdatum:
22. Dezember 2009

Beiträge: 325

ThomasKrichel hat vorgeschlagen, ich möge den String

1
$HOME/.[^.]* 

als Auswahlkriterium versuchen. Ich habe ihn ausprbiert. Ich kann damit tatsächlich die gewünschten Dateien auswählen, nämlich nur die verborgenen Ordner und Dateien. Außerdem kann ich mit --exclude-from=<datei> die unerwünschten verborgenen Daten (.cache usw) angeben; die werden tatsächlich übersprungen.

Jetzt würde ich noch gerne verstehen, warum das funktioniert. Der String $HOME/.[^.]* wird doch der Shell (bash) zum Fressen gegeben, nicht wahr? Die Dateien/Ordner, die ich auswählen will, beginnen mit NUR EINEM Punkt. In dem Auswahlstring sehe ich aber 2 Punkte. Wie interpretiert die Shell den ersten Punkt, den Inhalt der eckigen Klammer mit dem 2. Punkt, den Stern dahinter?

ThomasKrichel

Anmeldungsdatum:
25. März 2011

Beiträge: 184

jolexin schrieb:

Jetzt würde ich noch gerne verstehen, warum das funktioniert.

Das ist eine gute Frage, ich kann es dir leider nicht erklären, weil ich es selbst nicht so genau weiß 😀.

Hab das auch nur damals irgendwo gelesen und bei mir hat es funktioniert, leider habe ich aber in keiner Dokumentation etwas darüber finden können. Meine Vermutung wäre dass es damit zusammen hängt dass ein Punkt auch für ein beliebiges Zeichen stehen kann, was so ausgeschlossen werden soll.

Aber vielleicht weiß ja ein anderer User mehr darüber.

Thomas_Do Team-Icon

Moderator
Avatar von Thomas_Do

Anmeldungsdatum:
24. November 2009

Beiträge: 8808

jolexin schrieb:

1
$HOME/.[^.]* 

Ohne Gewähr 😉:

[^.]* heißt, 0 oder mehr Zeichen, die kein Punkt sind.

jolexin

(Themenstarter)
Avatar von jolexin

Anmeldungsdatum:
22. Dezember 2009

Beiträge: 325

Thomas_Do vermutet:

[^.]* heißt, 0 oder mehr Zeichen, die kein Punkt sind.

Ich habe in einem Ordner folgende Dateien erzeugt:

1
2
ls -a
.  ..  123  .abc  abc.conf  ..def  shubidu  .uvw.odt  .xyz.txt

Wende ich das Pattern beim ls an, so zeigt sich:

1
2
ls -a .[^.]*
.abc  .uvw.odt  .xyz.txt

Also wähle ich damit alle Dateien, die (1) mit einem . beginnen, (2) an 2. Stelle keinen Punkt haben und (3) danach beliebig viele beliebige Zeichen - u.a. auch Punkte - haben.

ThomasKrichel

Anmeldungsdatum:
25. März 2011

Beiträge: 184

jolexin schrieb:

Also wähle ich damit alle Dateien, die (1) mit einem . beginnen, (2) an 2. Stelle keinen Punkt haben und (3) danach beliebig viele beliebige Zeichen - u.a. auch Punkte - haben.

Das würde dann auch Sinn ergeben. Dann steht "[^.]" schlicht für "Zeichen ungleich Punkt".

In der Kombination ".[^.]*" bedeutet das dann: 1. Zeichen ein ist fix ein Punkt, da man ihn ja bereits davor geschrieben hat, 2. Zeichen ist kein Punkt und das "*" steht wie immer dafür das darauf dann wieder eine beliebige Zeichenkette folgt.

Rsync berücksichtigt sonst wohl auch ".." was ja bedeutet übergeordnetes Verzeichnis - das passt dann auch zur Ausgabe wenn man nur ".*" angibt

Antworten |