/* Do not remove the headers from this file! see /USAGE for more info. */ // Simple cp, no -r yet. //:COMMAND //USAGE: cp <source> <destination> // //This command will allow you to copy files from source to //destination. The source file must exist, the destination may or //may not exist at the time of the copy. If the destination does //not exist one will be created, if the destination does exist, at //the time of the copy it will be overwritten. // //The optional flag f can be used to force it to overwrite - // //cp -f wizroom.c workroom.c // //If you do not supply a full path name cp will assume that the //files will be in your current directory. // //cp wizroom.c workroom.c // //I will now have a copy of wizroom.c named workroom.c in the // current directory. // //cp /domains/std/wizroom.c /wiz/zifnab/workroom.c // //I now have a copy of wizroom.c in my home directory named workroom.c // //Like the *nix cp command, it can also be used with multiple source files //(eg using wildcard) provided the destination is a directory - eg // //cp s*.c /wiz/loriel/rooms/ // //This copies all files in current directory, which have a .c suffix, and // which start with s, to the directory /wiz/loriel/rooms/. inherit CMD; private void copy_one(string src, string dst, int force) { string contents; if ( is_file(dst) && !force ) outf("%s already exists. Copy failed.\n", dst); else if ( !(contents = read_file(src)) ) outf("Could not read %s. Copy failed.\n", src); else if ( !write_file(dst, contents, 1) ) outf("%s could not be written to. Copy failed.\n", dst); else outf("%s copied to %s.\n", src, dst); } private void main(mixed argv, mapping flags) { string src; string dst; if(sizeof(argv[0]) > 1 && !is_directory(argv[1])) { outf("cp: files dir not files file\n"); return; } if(sizeof(argv[0]) > 1) { if(argv[1][<1] != '/') argv[1] += "/"; foreach(src in argv[0]) { dst = argv[1] + split_path(src)[1]; copy_one(src, dst, flags["f"]); } } else { dst = argv[1]; src = argv[0][0]; if(is_directory(dst)) { if(dst[<1] != '/') dst += "/"; dst += depath(src); } copy_one(src, dst, flags["f"]); } }