Annotation of embedaddon/rsync/support/munge-symlinks, revision 1.1
1.1 ! misho 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>