/[cvs]/joko/ToolBox/Windows/RsyncHere/rsync-here.pl
ViewVC logotype

Contents of /joko/ToolBox/Windows/RsyncHere/rsync-here.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show annotations)
Thu Jan 23 23:06:08 2003 UTC (21 years, 5 months ago) by joko
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +1 -1 lines
File MIME type: text/plain
+ set the "dry-run" option to zero - 'rsync-here.pl' now actually does things

1 #!/usr/bin/perl
2
3 =head1 NAME
4
5 rsync-here.pl
6
7
8 =head1 SYNOPSIS
9
10 Wrapper around rsync program to provide an easy calling syntax for rsyncing against a predefined target.
11
12
13 =head1 DESCRIPTION
14
15 Before starting, your need to configure some specific variables in this file. Please see section CONFIGURATION.
16 rsync-here.pl expects a single argument on the command line. Give it a full directory path and
17 it will run the rsync program in the following style: (abstract)
18
19 cd /$root; \ # go to one level on top of the specified source path
20 $rsync -azuv -R -e ssh --progress $source $target
21
22
23 =head1 CONFIGURATION
24
25 Please edit "rsync-here.pl" to configure it, there is no ".ini"-style configuration file yet.
26
27 =over 4
28
29 =item -
30 $sh: /path/to/your/sh
31
32 =item -
33 $rsync: /path/to/your/rsync
34
35 =item -
36 $target_prefix: username@host.mydomain.org
37
38 =item -
39 $target_base: /path/to/your/backup-repository-base
40
41 =back
42
43 The hostname of your machine will be appended to "$target_base", on windows also the volumename.
44
45
46 =head1 PREREQUISITES
47
48 =over 4
49
50 =item *
51 Perl
52
53 =item *
54 Rsync
55
56 =item *
57 SSH
58
59 =back
60
61 You also may find it convenient to setup ssh working with keys. (use ssh-keygen [-d])
62
63
64 =head1 COPYRIGHT
65
66 This program is free software. You may copy or
67 redistribute it under the same terms as Perl itself.
68
69
70 =head1 TODO
71
72 =over 4
73
74 =item
75 + windows compatibility
76
77 =item
78 + waiting for keypress on exit: better handling
79
80 =item
81 + write output to STDOUT while working!
82
83 =item
84 - ease ssh-key-setup for non-interactive use, include doc at min!
85
86 =item
87 - read "user - config" variables from %ENV
88
89 =item
90 - make it possible to sync single files
91
92 =back
93
94 =cut
95
96 use strict;
97 use warnings;
98 use Sys::Hostname;
99
100 # user - config
101 my $sh = "sh";
102 my $rsync = "rsync";
103 my $target_prefix = 'joko@martha';
104 my $target_base = '~/backup';
105 my $bool_dry_run = 0;
106
107
108 # used variables
109 my $rootpath;
110 my $rootpath_append;
111 my $hostname;
112 my $source;
113 my $source_volume;
114 my $target;
115
116 # runtime - config
117 BEGIN { sub RUNNING_IN_HELL () { $^O eq 'MSWin32' } }
118
119 $rootpath = "/";
120 if (RUNNING_IN_HELL) {
121 $rootpath = "/cygdrive";
122 }
123
124
125 # main - get and validate arguments
126 $source = shift;
127 if (!$source) {
128 print "no source path given, exit.", "\n";
129 exit;
130 }
131
132 # main - modify source
133 if (RUNNING_IN_HELL) {
134 $source =~ s/^(\w)://i;
135 $source_volume = $1;
136 if (!$source_volume) {
137 print "we are running on windows, please give full path including volume. (e.g. \"c:\\home\")";
138 exit;
139 }
140 # convert backslashes to slashes
141 $source =~ s/\\/\//g;
142 $source_volume = lc $source_volume;
143 #$sourcePath = "/cygdrive/$sourcePath_volume$sourcePath";
144 $rootpath_append = "/$source_volume/";
145 }
146 # strip leading and trailing slash, if any
147 $source =~ s/^\///;
148 $source =~ s/\/$//;
149
150
151 # main - modify target
152 $hostname = hostname;
153 $hostname ||= "DUMMY";
154 $target = "$target_prefix:$target_base/$hostname/";
155 if (RUNNING_IN_HELL) {
156 $target .= "$source_volume/";
157 }
158
159
160 # main - build rsync command
161 my $cmd;
162
163 my $opt_dry_run = "";
164 $opt_dry_run = "--dry-run" if ($bool_dry_run);
165
166 if ($rootpath_append) { $rootpath .= $rootpath_append; }
167
168 $cmd = "$sh -c 'cd $rootpath; $rsync -azuv -e ssh -R --progress --times $opt_dry_run \"$source\" \"$target\"'";
169 print "synchronizing directories with...", "\n";
170 print "cmd: ", $cmd, "\n";
171
172 # main - run rsync
173 open(STDERR,'>&STDOUT'); # redirect error to out
174 $| = 1; # no buffering
175 system($cmd); # execute system command
176
177 # wait for pressing <ENTER>
178 print "\n";
179 print "sleeping, press <ENTER> to continue...";
180 read STDIN, (my $content), 1;
181

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed