X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/91a93df0497d9915d8b59e5caf1849dd9d14d5a1..bd685982389b78a158921b7839bdeca501338d19:/support/file-attr-restore diff --git a/support/file-attr-restore b/support/file-attr-restore index 11d7524f..a053e1d9 100755 --- a/support/file-attr-restore +++ b/support/file-attr-restore @@ -32,22 +32,23 @@ my $detail_line = qr{ \d+ \s+ # ignore size ([-bcdlps]) # 1. File type ( [-r][-w][-xsS] # 2. user-permissions - [-r][-w][-xsS] # 3. group-permissions - [-r][-w][-xtT] ) \s+ # 4. other-permissions + [-r][-w][-xsS] # group-permissions + [-r][-w][-xtT] ) \s+ # other-permissions \d+ \s+ # ignore number of links - (\S+) \s+ # 5. owner - (\S+) \s+ # 6. group + (\S+) \s+ # 3. owner + (\S+) \s+ # 4. group (?: \d+ \s+ )? # ignore size (when present) \w+ \s+ \d+ \s+ # ignore month and date \d+ (?: : \d+ )? \s+ # ignore time or year - ([^\r\n]+) $ # 7. name + ([^\r\n]+) $ # 5. name }x; while (<>) { my($type, $perms, $owner, $group, $name) = /$detail_line/; die "Invalid input line $.:\n$_" unless defined $name; die "A filename is not properly escaped:\n$_" unless $name =~ /^[^"\\]*(\\(\d\d\d|\D)[^"\\]*)*$/; - my $fn = eval "\"$name\""; + my $fn = $name; + $fn =~ s/\\(\d+|.)/ eval "\"\\$1\"" /eg; if ($type eq '-') { undef $type unless -f $fn; } elsif ($type eq 'd') {