diff --git a/jc/parsers/rsync_s.py b/jc/parsers/rsync_s.py
index 43a04207..11ef6395 100644
--- a/jc/parsers/rsync_s.py
+++ b/jc/parsers/rsync_s.py
@@ -174,108 +174,110 @@ def parse(
last_process: str = ''
line: str = ''
- try:
+ update_type = {
+ '<': 'file sent',
+ '>': 'file received',
+ 'c': 'local change or creation',
+ 'h': 'hard link',
+ '.': 'not updated',
+ '*': 'message',
+ '+': None
+ }
+ file_type = {
+ 'f': 'file',
+ 'd': 'directory',
+ 'L': 'symlink',
+ 'D': 'device',
+ 'S': 'special file',
+ '+': None
+ }
+
+ checksum_or_value_different = {
+ 'c': True,
+ '.': False,
+ '+': None,
+ ' ': None,
+ '?': None
+ }
+
+ size_different = {
+ 's': True,
+ '.': False,
+ '+': None,
+ ' ': None,
+ '?': None
+ }
+
+ modification_time_different = {
+ 't': True,
+ '.': False,
+ '+': None,
+ ' ': None,
+ '?': None
+ }
+
+ permissions_different = {
+ 'p': True,
+ '.': False,
+ '+': None,
+ ' ': None,
+ '?': None
+ }
+
+ owner_different = {
+ 'o': True,
+ '.': False,
+ '+': None,
+ ' ': None,
+ '?': None
+ }
+
+ group_different = {
+ 'g': True,
+ '.': False,
+ '+': None,
+ ' ': None,
+ '?': None
+ }
+
+ acl_different = {
+ 'a': True,
+ '.': False,
+ '+': None,
+ ' ': None,
+ '?': None
+ }
+
+ extended_attribute_different = {
+ 'x': True,
+ '.': False,
+ '+': None,
+ ' ': None,
+ '?': None
+ }
+
+ file_line_re = re.compile(r'(?P[<>ch.*][fdlDS][c.+ ?][s.+ ?][t.+ ?][p.+ ?][o.+ ?][g.+ ?][u.+ ?][a.+ ?][x.+ ?]) (?P.+)')
+ file_line_mac_re = re.compile(r'(?P[<>ch.*][fdlDS][c.+ ?][s.+ ?][t.+ ?][p.+ ?][o.+ ?][g.+ ?][x.+ ?]) (?P.+)')
+ stat1_line_re = re.compile(r'(sent)\s+(?P[0-9,]+)\s+(bytes)\s+(received)\s+(?P[0-9,]+)\s+(bytes)\s+(?P[0-9,.]+)\s+(bytes/sec)')
+ stat2_line_re = re.compile(r'(total size is)\s+(?P[0-9,]+)\s+(speedup is)\s+(?P[0-9,.]+)')
+
+ file_line_log_re = re.compile(r'(?P\d\d\d\d/\d\d/\d\d)\s+(?P