summaryrefslogtreecommitdiff
path: root/perl/recursiveftpget.pl
diff options
context:
space:
mode:
Diffstat (limited to 'perl/recursiveftpget.pl')
-rw-r--r--perl/recursiveftpget.pl67
1 files changed, 67 insertions, 0 deletions
diff --git a/perl/recursiveftpget.pl b/perl/recursiveftpget.pl
new file mode 100644
index 000000000..02299b00d
--- /dev/null
+++ b/perl/recursiveftpget.pl
@@ -0,0 +1,67 @@
+#!/usr/local/bin/perl
+#
+# Author: Daniel Stenberg <Daniel.Stenberg@sth.frontec.se>
+# Date: August 25 1998
+# Version: 0.1
+#
+# This is just meant as an example of why we wrote curl in the first place.
+# Quick n' easy scripting use.
+#
+
+$dir = $ARGV[0];
+
+$target = $ARGV[1];
+
+$maxdepth = $ARGV[2];
+
+if($dir eq "" || $target eq "") {
+ print "Usage: <URL> <dir> [max depth level] \n";
+ print " End the URL with a slash if a directory is specified, please\n";
+ exit;
+}
+
+if(($maxdepth ne "") && ($maxdepth == 0)) {
+ # reached maximum depth, die
+ print "Reached maximum recursive depth level ($maxdepth), exiting...\n";
+ exit;
+}
+
+# get dir
+@all = `curl -s $dir`;
+
+if($all[0] ne "") {
+ print "Got the main $dir dir\n";
+}
+
+line:
+for(@all) {
+ chop; # cut off newline
+ @linep= split(" ", $_);
+
+ $name = $linep[$#linep];
+
+ $firstletter=substr($linep[0], 0, 1);
+
+ if($firstletter eq "d") {
+ # this is a subdir, recurse
+ # if not . or .. of course
+
+ if(($name eq ".") || ($name eq "..")) {
+ next line;
+ }
+ print "Recursing for dir $dir$name in target $target/$name\n";
+
+ $nextdepth=$maxdepth-1;
+ print `$0 $dir$name/ $target/$name $nextdepth`;
+ }
+ elsif($firstletter eq "-") {
+ # this is a file, get it
+ # oh, make sure the target dir exists first
+
+ if(! -r $target ) {
+ mkdir($target,0777);
+ }
+ print "Getting file $dir$name in target $target/$name\n";
+ print `curl -s $dir$name >$target/$name`;
+ }
+}