MMCT TEAM
Server IP : 128.199.20.84  /  Your IP : 172.70.127.208
Web Server : Apache/2.4.41 (Ubuntu)
System : Linux competent-maruti 5.4.0-128-generic #144-Ubuntu SMP Tue Sep 20 11:00:04 UTC 2022 x86_64
User : www-data ( 33)
PHP Version : 8.0.20
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF
Directory (0755) :  /usr/src/../share/rsync/scripts/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : //usr/src/../share/rsync/scripts/munge-symlinks
#!/usr/bin/perl
# This script will either prefix all symlink values with the string
# "/rsyncd-munged/" or remove that prefix.

use strict;
use Getopt::Long;

my $SYMLINK_PREFIX = '/rsyncd-munged/';

my $munge_opt;

&GetOptions(
    'munge' => sub { $munge_opt = 1 },
    'unmunge' => sub { $munge_opt = 0 },
    'all' => \( my $all_opt ),
    'help|h' => \( my $help_opt ),
) or &usage;

&usage if $help_opt || !defined $munge_opt;

my $munged_re = $all_opt ? qr/^($SYMLINK_PREFIX)+(?=.)/ : qr/^$SYMLINK_PREFIX(?=.)/;

push(@ARGV, '.') unless @ARGV;

open(PIPE, '-|', 'find', @ARGV, '-type', 'l') or die $!;

while (<PIPE>) {
    chomp;
    my $lnk = readlink($_) or next;
    if ($munge_opt) {
	next if !$all_opt && $lnk =~ /$munged_re/;
	$lnk =~ s/^/$SYMLINK_PREFIX/;
    } else {
	next unless $lnk =~ s/$munged_re//;
    }
    if (!unlink($_)) {
	warn "Unable to unlink symlink: $_ ($!)\n";
    } elsif (!symlink($lnk, $_)) {
	warn "Unable to recreate symlink: $_ -> $lnk ($!)\n";
    } else {
	print "$_ -> $lnk\n";
    }
}

close PIPE;
exit;

sub usage
{
    die <<EOT;
Usage: munge-symlinks --munge|--unmunge [--all] [DIR|SYMLINK...]

--munge      Add the $SYMLINK_PREFIX prefix to symlinks if not already
             present, or always when combined with --all.
--unmunge    Remove one $SYMLINK_PREFIX prefix from symlinks or all
             such prefixes with --all.

See the "munge symlinks" option in the rsyncd.conf manpage for more details.
EOT
}

MMCT - 2023