Man page: Move the description of --info=progress2 to a better place.
[rsync/rsync.git] / support / mnt-excl
index 993180e..e741865 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/perl -w
+#!/usr/bin/perl
 # This script takes a command-line arg of a source directory
 # that will be passed to rsync, and generates a set of excludes
 # that will exclude all mount points from the list.  This is
 #
 # NOTE:  This script expects /proc/mounts to exist, but could be
 # easily adapted to read /etc/mtab or similar.
+#
+# ADDENDUM:  The addition of the --filter option (which has support for
+# absolute-anchored excludes) can make this screen unneeded in some
+# scenarios.  If you don't need delete protection on the receiving side
+# (or if the destination path is identical to the source path), then you
+# can exclude some absolute paths from the transfer based on the mount
+# dirs.  For instance:
+#
+# awk '{print $2}' /proc/mounts | grep -v '^/$' | \
+#   rsync -avf 'merge,/- -' /dir host:/dest/
 
 use strict;
+use warnings;
 use Cwd 'abs_path';
 
+my $file = '/proc/mounts';
 my $dir = shift || '/';
-$dir = abs_path($dir);
-$dir =~ s#([^/]*)$##;
+my $trailing_slash = $dir =~ m{./$} ? '/' : '';
+$dir = abs_path($dir) . $trailing_slash;
+$dir =~ s{([^/]*)$}{};
 my $trailing = $1;
 $trailing = '' if $trailing eq '.' || !-d "$dir$trailing";
 $trailing .= '/' if $trailing ne '';
 
-open(IN, '/proc/mounts') or die $!;
+open(IN, $file) or die "Unable to open $file: $!\n";
 while (<IN>) {
     $_ = (split)[1];
-    next unless s#^\Q$dir$trailing\E##o && $_ ne '';
+    next unless s{^\Q$dir$trailing\E}{}o && $_ ne '';
     print "- /$trailing$_\n";
 }
 close IN;