File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / rsync / support / munge-symlinks
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Fri Feb 17 15:09:30 2012 UTC (12 years, 4 months ago) by misho
Branches: rsync, MAIN
CVS tags: v3_1_2p5, rsync3_0_9p0, RSYNC3_1_0, RSYNC3_0_9, HEAD
rsync

    1: #!/usr/bin/perl
    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>