Annotation of embedaddon/rsync/support/munge-symlinks, revision 1.1.1.2

1.1.1.2 ! misho       1: #!/usr/bin/env perl
1.1       misho       2: # This script will either prefix all symlink values with the string
                      3: # "/rsyncd-munged/" or remove that prefix.
                      4: 
                      5: use strict;
                      6: use Getopt::Long;
                      7: 
                      8: my $SYMLINK_PREFIX = '/rsyncd-munged/';
                      9: 
                     10: my $munge_opt;
                     11: 
                     12: &GetOptions(
                     13:     'munge' => sub { $munge_opt = 1 },
                     14:     'unmunge' => sub { $munge_opt = 0 },
                     15:     'all' => \( my $all_opt ),
                     16:     'help|h' => \( my $help_opt ),
                     17: ) or &usage;
                     18: 
                     19: &usage if $help_opt || !defined $munge_opt;
                     20: 
                     21: my $munged_re = $all_opt ? qr/^($SYMLINK_PREFIX)+(?=.)/ : qr/^$SYMLINK_PREFIX(?=.)/;
                     22: 
                     23: push(@ARGV, '.') unless @ARGV;
                     24: 
                     25: open(PIPE, '-|', 'find', @ARGV, '-type', 'l') or die $!;
                     26: 
                     27: while (<PIPE>) {
                     28:     chomp;
                     29:     my $lnk = readlink($_) or next;
                     30:     if ($munge_opt) {
                     31:        next if !$all_opt && $lnk =~ /$munged_re/;
                     32:        $lnk =~ s/^/$SYMLINK_PREFIX/;
                     33:     } else {
                     34:        next unless $lnk =~ s/$munged_re//;
                     35:     }
                     36:     if (!unlink($_)) {
                     37:        warn "Unable to unlink symlink: $_ ($!)\n";
                     38:     } elsif (!symlink($lnk, $_)) {
                     39:        warn "Unable to recreate symlink: $_ -> $lnk ($!)\n";
                     40:     } else {
                     41:        print "$_ -> $lnk\n";
                     42:     }
                     43: }
                     44: 
                     45: close PIPE;
                     46: exit;
                     47: 
                     48: sub usage
                     49: {
                     50:     die <<EOT;
                     51: Usage: munge-symlinks --munge|--unmunge [--all] [DIR|SYMLINK...]
                     52: 
                     53: --munge      Add the $SYMLINK_PREFIX prefix to symlinks if not already
                     54:              present, or always when combined with --all.
                     55: --unmunge    Remove one $SYMLINK_PREFIX prefix from symlinks or all
                     56:              such prefixes with --all.
                     57: 
                     58: See the "munge symlinks" option in the rsyncd.conf manpage for more details.
                     59: EOT
                     60: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>