54 lines
1.2 KiB
Perl
54 lines
1.2 KiB
Perl
#!/usr/bin/perl
|
|
|
|
# $Header: /home/cvs/386BSD/ports/lang/perl/eg/findcp,v 1.1.1.1 1993/08/23 21:29:43 nate Exp $
|
|
|
|
# This is a wrapper around the find command that pretends find has a switch
|
|
# of the form -cp host:destination. It presumes your find implements -ls.
|
|
# It uses tar to do the actual copy. If your tar knows about the I switch
|
|
# you may prefer to use findtar, since this one has to do the tar in batches.
|
|
|
|
sub copy {
|
|
`tar cf - $list | rsh $desthost cd $destdir '&&' tar xBpf -`;
|
|
}
|
|
|
|
$sourcedir = $ARGV[0];
|
|
if ($sourcedir =~ /^\//) {
|
|
$ARGV[0] = '.';
|
|
unless (chdir($sourcedir)) { die "Can't find directory $sourcedir: $!"; }
|
|
}
|
|
|
|
$args = join(' ',@ARGV);
|
|
if ($args =~ s/-cp *([^ ]+)/-ls/) {
|
|
$dest = $1;
|
|
if ($dest =~ /(.*):(.*)/) {
|
|
$desthost = $1;
|
|
$destdir = $2;
|
|
}
|
|
else {
|
|
die "Malformed destination--should be host:directory";
|
|
}
|
|
}
|
|
else {
|
|
die("No destination specified");
|
|
}
|
|
|
|
open(find,"find $args |") || die "Can't run find for you: $!";
|
|
|
|
while (<find>) {
|
|
@x = split(' ');
|
|
if ($x[2] =~ /^d/) { next;}
|
|
chop($filename = $x[10]);
|
|
if (length($list) > 5000) {
|
|
do copy();
|
|
$list = '';
|
|
}
|
|
else {
|
|
$list .= ' ';
|
|
}
|
|
$list .= $filename;
|
|
}
|
|
|
|
if ($list) {
|
|
do copy();
|
|
}
|