2011-01-05 15 views
0

ich einen rsync-Befehl verwenden, zwei Verzeichnisse remote> lokalersync Filterung

der Befehl synchronisieren wird (in Python-Skript verwendet)

os.system('rsync --verbose --progress --stats --recursive\ 
      --copy-links --times --include="*/" --include="*good_name*.good_ext*"\ 
      --exclude-from "/myhome/mydir/src/rsync.exclude"\ 
      %s %s'%(remotepath,localpath)) 

ich bestimmte Verzeichnisse ausschließen möchten, die dieselben Dateien hat, dass ich auch einbeziehen wollen.

Ich möchte

any_dir_name/any_file_name.good 

rekursiv aufzunehmen, aber ich möchte jegliche und alle Dateien, auf die in sind

bad_dir_name/ 

I verwendet --exclude-from und hier meine ist aus der Datei ausschließen

* 
/*.bad_dir_name/ 

Leider funktioniert es nicht. Ich vermute, dass es etwas mit --include="*/" zu tun haben könnte, aber wenn ich es entferne, synchronisiert der Befehl überhaupt keine Dateien.

+1

Ich schlage vor, Sie versuchen, dies auf superuser.com zu fragen –

+0

Haben Sie versucht, die Option -f zu betrachten? Es ist in der man-Seite unter FILTER REGELN abgedeckt. Alternativ kann eine schnelle und schmutzige Lösung einen 'find'-Befehl zusammen mit einer Druckaktion schreiben und in eine Datei ausgeben. Da gehst du, sofort perfekte Datei ausschließen. –

Antwort

2

Ich habe es. Ich -vv verwendet nach zu finden, welche Regel das Verzeichnis wurde in der Synchronisierungsliste zeigt, und da rsync reguläre Ausdrücke unterstützt, änderte ich meine Aussage von "*/" zu

--include="*[^.bad_dir_name]/" 

sind und alles funktioniert jetzt gut.

+0

Nein, rsync unterstützt in seinen Filtern keine regulären Ausdrücke. Es unterstützt einfache Glob-Ausdrücke (siehe https://download.samba.org/pub/rsync/rsync.html). Was Sie wirklich gemacht haben, sind nur Verzeichnisse, deren Namen nicht mit dem Zeichen enden. (Periode), b, a, d, _, i, r, n, m oder e. So würden Sie zum Beispiel jedes Verzeichnis namens "food" oder "bin" verpassen. – Bklyn