NcFTP - Internet file transfer program
ncftp [program options] [[open options] hostname[:pathname]]
-D : Turn debug mode and trace mode on.
-L : Don't use visual mode (use line mode).
-V : Use visual mode.
-H : Dump the version information.
Command-line open options:
-a : Open anonymously.
-u : Open with username and password prompt.
-p X : Use port number X when opening.
-r : Redial until connected.
-d X : Redial, delaying X seconds between tries.
-g X : Give up after X redials without connection.
Command-line retrieve options:
-C : Force continuation (reget).
-f : Force overwrite.
-G : Don't use wildcard matching.
-R : Recursive. Useful for fetching whole directories.
-n X : Get selected files only if X days old or newer.
NcFTP is a user interface to the Internet standard File
Transfer Protocol. This program allows a user to transfer
files to and from a remote network site, and offers
additional features that are not found in the standard
The program runs in one of three modes: visual mode, line
mode, and colon mode.
If your system is somewhat modern, the default mode should
be visual mode. This is a full-screen interface that uses
the curses library. With visual mode, you edit the
program's settings with a nice screen interface instead of
typing arcane commands.
If you are not in visual mode, you will be using line mode
for the interactive shell. This mode is a no-frills
command-line interface that will look like the default ftp
program's command shell.
The third mode, colon mode, refers to the program's ability
to do a quick retrieve of a file directly from your shell
command line, without going into the program's own shell.
This mode is useful for shell scripts.
INTRODUCTION TO VISUAL MODE
When entering visual mode, the screen clears and is
rewritten with the splash screen. You should see the black
status bar occupying the second to last row on the screen.
Beneath the status bar is the input line, where you type
commands to the program's shell.
The program then waits for you to do something. Usually
this means you want to open a remote filesystem to transfer
files to and from your local machine's filesystem. To do
that, you need to know the symbolic name of the remote
system, or its Internet Protocol (IP) address. For example,
a symbolic name might be ``typhoon.unl.edu,'' and its IP
address could be ``188.8.131.52.'' To open a connection to
that system, you use the program's open command:
Both of these try to open the machine called typhoon at the
University of Nebraska. Using the symbolic name is the
preferred way, because IP addresses may change without
notice, while the symbolic names usually stay the same.
When you open a remote filesystem, you need to have
permission. The FTP Protocol's authentication system is
very similar to that of logging in to your account. You
have to give an account name, and its password for access to
that account's files. However, most remote systems that
have anything you might be interested in don't require an
account name for use. You can often get anonymous access to
a remote filesystem and exchange files that have been made
publicly accessible. The program attempts to get anonymous
permission to a remote system by default. What actually
happens is that the program tries to use ``anonymous'' as
the account name, and when prompted for a password, uses
your E-mail address as a courtesy to the remote system's
maintainer. You can have the program try to use a specific
account also. That will be explained later.
If the connection succeeded, you should see the status bar
change to hold the remote system's name on one side, and the
current remote directory on the other side. To see what's
in the current remote directory, you can use the program's
ls and dir commands. The former is terse, preferring more
remote files in less screen space, and the latter is more
verbose, giving detailed information about each item in the
You can use the program's cd command to move to other
directories on the remote system. The cd command behaves
very much like the command of the same name in the Bourne
and Korn shell.
The purpose of the program is to exchange data with other
systems. You can use the program's get command to copy a
file from the remote system to your local system:
The program will display the progress of the transfer on the
screen, so you can tell how much needs to be done before the
transfer finishes. When the transfer does finish, then you
can enter more commands to the program's command shell.
You can use the program's put command to copy a file from
your system to the remote system:
When you are finished using the remote system, you can open
another one or use the quit command to terminate the
THE BOOKMARKS FILE
One of the program's goals is to minimize typing and
maximize convenience. The program automatically saves
information about the sites you call on in a special file
called the bookmarks file, which is stored in the .ncftp
subdirectory of your home directory. Each bookmark saves
the host name along with other settings, including the
remote directory you were in, the account information, and
more. This makes it easy to call back a site later and have
everything be like it was when you left the last time.
A big advantage of saving this information is that you can
refer to a site by a shorter, more meaningful name, instead
of using the full symbolic host name for a site. For
example, if you called a site named ``typhoon.unl.edu''
frequently, its bookmark name might be just ``typhoon.''
Then, instead of:
you could use:
You could also abbreviate the bookmark name further, as long
as the program will know which site you are referring to.
If no other bookmark's name starts with the letters ``ty,''
you could do just:
Use the bookmarking feature to assign mnemonic names to
hosts whose real names don't give much hint to what you call
there for. A popular game called Nethack is archived at
linc.cis.upenn.edu, in the /pub/NH3.1 directory. You could
assign ``nethack'' as the bookmark name for this site. Then
you could try:
USING THE BOOKMARK EDITOR
To manipulate the bookmarks stored in your bookmarks file,
you use the program's bookmark editor. Run the bookmark
editor by typing the bookmarks command from within the
program. This brings up a new screen of information.
On the right side is the list of remote systems the program
has saved for you already. Each time you open a connection
to a remote system, the program saves an entry in your
bookmark file for you automatically. If you have not opened
any sites successfully yet, this list would be empty.
On the left side is some instructions saying what you can do
with the list. The bookmark editor is waiting for you to do
something, like select a bookmark whose settings you want to
Some bookmark editor ``hot key'' commands are one key only.
You do not need to hit enter after the hot key commands. To
exit the bookmark editor for example, you would just type
the ``x'' key only. The multi-key commands require a slash
first and do require the enter key. To delete the selected
site, for example, you would type the ``/'' key, then
``del,'' and then the enter key.
You can use the ``d'' key to move down one line in the list,
and the ``u'' key to move up one line. If you have many
entries in the bookmark list, you won't be able to see them
all at once. The bookmark list scrolls as appropriate to
bring the other sites into view. Use the ``p'' and ``n''
keys to move pages at a time.
Another way to select a site in the bookmark list is to use
the capital letters. If I had many entries in my bookmark
list, but wanted to select a site whose bookmark name was
``nethack,'' I could type ``N'' and the list would zoom to
the first site with bookmark starting with the letter ``n.''
After you have hilited a bookmark you want to edit, use the
/ed command. Doing that brings up another screen with the
settings for that bookmark.
In the Bookmark Options screen, you use hot keys to select a
setting to edit. To edit the bookmark name, for example,
you would type ``a.'' When you are finished editing this
bookmark, hit the ``x'' key to return to the bookmark
Edit the Bookmark name field to change the name you use to
open this site with. Remember, when you change the bookmark
name , you must use this name to refer to this particular
bookmark, so if you change it to ``foobar,'' you need to use
``open foobar.'' This is required because you can have
multiple entries for a remote host. For example, you could
have two bookmarks for wuarchive.wustl.edu, named ``wumac''
and ``wuwindows.'' If you were to say ``open
wuarchive.wustl.edu,'' it would not be clear to the program
which host entry to use.
Change the login information for the site by editing the
User, Password, and Account fields. Normally you would want
to leave these as is for anonymous logins. Depending on
your situation, you might want to use a specific account on
the remote system. This is one way to get the program to
use a non-anonymous login.
The Directory field specifies the directory to move to upon
successful connection to the remote host for this bookmark.
When you close the site, this field is updated for you
automatically to be the directory you were in when you
closed the site.
The Transfer Type field can be changed to use a different
translation mode when transferring files. This program is
usually running on a UNIX system, and most remote systems
are also UNIX variants, so the default transfer type is
binary, which does no translation at all.
However, when you need to work with plain text files and
transfer them between non-UNIX systems, you can change this
to ASCII. That will guarantee that the text-only files will
translate correctly. Most often, you will need to use the
binary transfer type.
The Port field can be changed so that the program tries to
use a non-standard port number. I have yet to ever need a
different port number, but this capability is here in case
The Has SIZE Command field will probably not need to be
edited. This field is mostly for your information only.
The SIZE command is an FTP Protocol command that the program
would like the remote server to support. If it is
supported, the program can get an exact number of bytes of
remote files before transferring. That is nice to know so
the progress reports work better.
The Has MDTM Command field will probably not need to be
edited either. If the remote server supports it, the
program can get the exact modification date of the remote
file, and set the local file to the same date.
The Can Use Passive FTP field specifies whether the remote
server allows use of the FTP Protocol's PASV command. There
are two ways to set up FTP connections. The default way is
what I call Port FTP. Unfortunately, Port FTP cannot be
used when your local host is hiding behind a Firewall.
Passive FTP can be used with a firewall, and that's why I
would like to use that method if possible. You probably
will not need to edit this field, since this can be detected
automatically most of the time.
The Operating System field is used by the program to tell if
it can rely on certain dependencies to specific operating
systems. If the OS is a UNIX variant, the program can make
some assumptions about the remote server's responses. For
example, if the OS is UNIX, the ls command tries to use the
-CF flags, like you could with ``/bin/ls -CF'' on UNIX. If
the OS wasn't UNIX, the ``-CF'' might not make sense to the
remote server and it might complain. You probably will not
need to edit this field, since this can be detected
automatically most of the time.
The comment field can be used to store a brief description
about the site. For example, for my ``nethack'' entry, I
could use this field to hold ``Archive site for latest
version of Nethack.'' When you are in the bookmark editor's
window, if you hilite a site that has a comment, it is
printed at the bottom of the screen so you do not have to
edit the site to look at it.
In addition to remote-host specific options, the program has
global options that are user-configurable. To change the
program's preferences, run the prefs command from within the
The Default open mode field specifies how the program should
try to open connections. If you do a lot of anonymous
FTPing, you should leave this set to anonymous. You might
want to set this field to user & password if the hosts you
FTP to most often don't allow anonymous logins. For
example, if you are using the program on your company
network to copy things from different company machines, you
would not want to use anonymous FTP mode.
The Anonymous password field lets you change the value given
to the remote host when you use an anonymous login. It is
customary (and sometimes required) to use your e-mail
address as the password for anonymous FTP, so the remote
host's administrator knows who is using the service. If the
program didn't get your e-mail address right, or you want to
use something different, you can change it here.
The program now uses more whitespace than before to reduce
eyestrain. If you prefer, you can turn off that feature by
changing the Blank lines between cmds field.
The program can log the transfers you do to a file so you
can refer to the log if you can't remember where you got
something. To turn on the log, which is saved as
~/.ncftp/log, you can set the User log size field to a
number greater than zero. You probably do not want to let
this file grow forever, so you set the maximum size of the
log by setting that field.
Although the program is perfectly happy saving every site
you ever open in the bookmarks file, you may want to put an
upper bound on the number of sites saved. If you have a
slow machine, which might cause the program to take awhile
to load and save the bookmarks, or if disk space is at a
premium, you can set the Max bookmarks to save field to
limit the number of bookmarks saved. Once that limit is
reached, the program will discard sites whose time since the
last connection is the longest. In other words, a site you
only called once a long time ago and forgot about will be
the first to go.
A few program functions need to use a pager program to view
large amounts of text. For example, the page command
retrieves a remote file and uses the pager to view it. You
can specify the program to use (and its command line flags,
if any) by setting the pager field.
When you transfer files between the remote host and your
local host, the program uses a progress meter to show you
the status of the transfer. The program has a few different
progress meters to choose from, and you can try out the
other ones by changing the Progress meter field.
You can control how much of the remote server's chatter is
printed by changing the Remote messages field. The program
always prints error messages, but most of the time the
remote server doesn't have anything useful to say. There
are a couple of messages that may be worth printing. The
first is the startup message. Typically, when you connect
to a server it has some important information about the
server. Some servers have chdir messages, which are sent
when you enter a special directory. You specify whether to
print these messages by toggling the Remote messages field.
By default, the program stays in the same directory you were
in when you ran the program, so that downloads will go in
that directory. I like to use a ``download directory'' so
that all of my downloads go to a specific directory. This
prevents me from exceeding my quota, and overwriting my
other files. You can set the Startup in Local Dir field to
have the program change the local directory each time when
the program starts up. Then you know where to expect your
downloads to end up.
The program itself has some messages which you may get tired
of and want to turn off. You can change the Startup
messages field to specify whether the program prints its
``splash screen'' and whether it prints a tip on how to
maximize use of the program.
When you retrieve a remote file, by default the program
tries to also set the exact modification time of the local
file as the remote file. You can turn that off by changing
the File timestamps field.
If you don't like the full-screen graphics, you can use the
line-oriented mode by changing the Screen graphics field.
Once you turn visual mode off from the Preferences screen,
you won't be able to get back to the preferences screen
again when using line mode. To get back into visual mode,
you can run the program with the ``-V'' flag, like:
I will now describe the commands that the program's command
shell supports. The first command to know is help. If you
from the command shell, the program prints the names of all
of the supported commands. From there, you can get specific
help for a command by typing the command after, for example:
prints information about the open command.
The shell escape command is simply the exclamation point, !
To spawn a shell, just do:
You can also use this to do one command only, like:
The cd command changes the working directory on the remote
host. Use this command to move to different areas on the
remote server. If you just opened a new site, you might be
in the root directory. Perhaps there was a directory called
``/pub/news/comp.sources.d'' that someone told you about.
From the root directory, you could:
or, more concisely,
Then, commands such as get, put, and ls could be used to
refer to items in that directory.
Some shells in the UNIX environment have a feature I like,
which is switching to the previous directory. Like those
shells, you can do:
to change to the last directory you were in.
The close command disconnects you from the remote server.
The program does this for you automatically when needed, so
you can simply open other sites or quit the program without
worrying about closing the connection by hand.
Sometimes it may be necessary to use the create command.
This makes an empty file on the remote host. This can be
useful when you are unable to contact the remote server's
administrator, but hope someone in the know will spot your
file. For example,
might persuade someone to repost that file.
The debug command is mostly for use by me and the testers.
You could type
to turn debugging mode on. Then you could see all messages
between the program and the remote server, and things I
print only in debugging mode. If you report a bug, I might
ask you to send me a trace file. To do that, you would run
the program, and then type
debug trace 1
And so I could see how the program was compiled, you would
After you quit the program, you could then send me an email
with the contents of the ~/.ncftp/trace file, which would
also have the version information in it.
The dir command prints a detailed directory listing. It
tries to behave like UNIX's ``/bin/ls -l'' command. If the
remote server seems to be a UNIX host, you can also use the
same flags you would with ls, for instance
would try to act like
would on UNIX.
The echo command wouldn't seem very useful, but it can be
nice for use with the program's macros. It behaves like the
equivalent command does under a UNIX shell, but accepts some
extra flags. All ``percent'' flags are fed through
strftime(4). So you could type
echo It is now %H:%M on %B %d.
and you should get something like this printed on your
It is now 19:00 on January 22.
There are also ``at'' flags, which the program expands:
@H : Name of connected host
@D : Full pathname of remote current working directory
@J : Short name of remote current working directory
@N : Newline.
@n : Bookmark name of connected host
echo "Connected to @H at %H:%M." >> junk
If you later looked at the contents of ``junk,'' it might
Connected to sphygmomanometer.unl.edu at 20:37.
The get command copies files from the current working
directory on the remote host to your machine's current
working directory. To place a copy of ``README'' in your
local directory, you could try:
The get command has some powerful features which are
described below, in ``SPECIAL DOWNLOADING FEATURES.''
The bookmarks command runs the Bookmark Editor. You already
know how what that does, since you read the section above on
The lcd command is the first of a few ``l'' commands that
work with the local host. This changes the current working
directory on the local host. If you want to download files
into a different local directory, you could use lcd to
change to that directory and then do your downloads.
Another local command that comes in handy is the lls
command, which runs ``/bin/ls'' on the local host and
displays the results in the program's window. You can use
the same flags with lls as you would in your command shell,
so you can do things like:
lls -lrt p*.txt
The program also has a built-in interface to the name
service via the lookup command. This means you can lookup
entries for remote hosts, like:
lookup cse.unl.edu ftp.cs.unl.edu sphygmomanometer.unl.edu
There is also a more detailed option, enabled with ``-v,''
lookup -v cse.unl.edu ftp.cs.unl.edu
You can also give IP addresses, so this would work too:
The lpage command views a local file one page at a time. By
default, the program uses your pager program to view the
files. You can choose to use the built-in pager by using
the ``-b'' flag. Example:
lpage -b ~/.ncftp/bookmarks
The lpwd command is prints the current local directory. Use
this command when you forget where you are on your local
The ls command prints a brief directory listing. It tries
to behave like UNIX's ``/bin/ls -CF'' command. If the
remote server seems to be a UNIX host, you can also use the
same flags you would with ls, for instance
would try to act like
would on UNIX.
The mkdir command tries to create a new directory on the
remote host. For many public archives, you won't have the
proper access permissions to do that.
Some servers let you use different transfer modes. Most
servers support only the default mode, which is stream mode.
The program supports that mode and also block mode. The
primary advantage to using this mode is that you can use the
same data connection for all your transfers. With stream
mode the program and server must establish a new data
connection for each file, and doing that takes extra time
and bandwidth. To use the mode command to turn on block
mode, you would type
and the command to use stream mode would be
The program turns on block mode automatically when it knows
the remote server supports it and implements it correctly,
so you should not need to use this command.
The open command connects you to a remote host. Many times,
you will simply open a host without using any flags, but
nonetheless the open command has some flags to enable
To force an anonymous open, use the ``-a'' flag. On the
ftp.ncftp.com machine, which is the official archive site
for NcFTP, I have a need to use both anonymous logins and
user logins. The Bookmark Editor remembers type of login I
used last, so if the last time was a user login, I could use
the ``-a'' flag to switch back to the anonymous login type
without having to use the Bookmark Editor to change that.
Likewise, I could use the ``-u'' flag to force a user open.
Then I could give my account name and password to access
Many of the big archive sites like wuarchive.wustl.edu are
busy, so you aren't guaranteed a connection to them. The
program lets you ``redial'' sites periodically, until a
connection succeeds. Use the ``-r' flag to turn on
Redial itself has a few parameters. You can set the delay,
in seconds, of the time spent waiting between redials. You
can also have the program give up after a maximum number of
redials is reached. Here's an example that fully utilizes
open -r -d 75 -g 10 bowser.nintendo.co.jp
The ``-r'' turns on redialing, the ``-d'' sets the redial
delay to 75 seconds, and the ``-g'' flag limits redialing to
10 tries. If you like, you can just trust the default
redial settings and only use ``-r.''
The open command will run the Bookmark Editor if you don't
supply a hostname to open. You can use the Bookmark Editor
to select a host and open it by hitting the return key.
The page command lets you browse a remote file one page at a
time. This is useful for reading README's on the remote
host without downloading them first. This command uses
whatever program you have set the pager field in the
Preferences screen to view the file.
The pdir and pls commands are equivalent to dir and ls
respectively, only they feed their output to your pager.
These commands are primarily for line mode because directory
listings can scroll offscreen. If you do a normal ls while
in visual mode, if it would go offscreen, the built-in pager
kicks in automatically. Therefore I don't recommend using
pdir and pls while in visual mode.
The redir and predir commands give you a way to re-display
the last directory listing. The program saves the output
from the last dir or ls command you did, so if you want to
see it again you can do this without wasting network
bandwidth. The predir command is the same as redir, except
that the output is fed to your pager.
I have found that I mostly download, and have next to no
need at all to upload. But the put command is there in case
you need to upload files to remote hosts. For example, if I
wanted to send some files to a remote host, I could do:
put 02.txt 03.txt 05.txt 07.txt 11.txt
The put command won't work if you don't have the proper
access permissions on the remote host. Also, this command
doesn't have any of the special features that the get
command has, except for the ``-z'' option.
The pwd command prints the current remote working directory.
In visual mode, this is in the status bar.
If you need to change the name of a remote file, you can use
the rename command, like:
rename SPHYGMTR.TAR sphygmomanometer-2.3.1.tar
Of course, when you finish using the program, type quit to
end the program (You could also use bye, exit, or ^D).
The quote command can be used to send a direct FTP Protocol
command to the remote server. Generally this isn't too
useful to the average user (or me either).
The rhelp command sends a help request to the remote server.
The list of FTP Protocol commands is often printed, and
sometimes some other information that is actually useful,
like how to reach the site administrator.
Depending on the remote server, you may be able to give a
parameter to the server also, like:
One server responded:
Syntax: NLST [ <sp> path-name ]
If you need to delete a remote file you can try the rm
command. Much of the time this won't work because you won't
have the proper access permissions. This command doesn't
accept any flags, so you can't nuke a whole tree by using
``-rf'' flags like you can on UNIX.
Similarly, the rmdir command removes a directory. Depending
on the remote server, you may be able to remove a non-empty
directory, so be careful.
The set command is provided for backward compatibility with
older versions of the program, and is superseded by the
prefs command. The basic syntax is:
set option value
Where the option is the short name of the corresponding
field in the Preferences screen. The short names of the
preferences fields can be found by browsing your
~/.ncftp/prefs file. This command is mainly for use with
line mode, but since that mode is no longer officially
supported by me, I want to discourage the use of this
One obscure command you may have to use someday is site.
The FTP Protocol allows for ``site specific'' commands.
These ``site'' commands vary of course, but one common sub-
command that is useful that some sites support is chmod,
site chmod 644 README
Try doing one of these to see what the remote server
supports, if any:
You may need to change transfer types during the course of a
session with a server. You can use the type command to do
this. Try one of these:
If you ever need to contact me about the program, please
familiarize yourself with the version command. This command
dumps a lot of information that tells me which edition of
the program you are using, and how it was installed on your
system. Here's a way to save the output of this command to
a file, so you can send it to me:
version > version.txt
SPECIAL DOWNLOADING FEATURES
You probably already know that you use the get command to
copy files on the remote host to the local host. But the
get command has a few other tricks that you might find
useful. First of all, ncftp skips files you already have.
If you try to
and there is a file named ``file24'' in the current local
directory already, the program uses some additional
heuristics to determine if it should actually waste network
bandwidth to download it again.
The program tries to get the date and size of the remote
file ``file24.'' If that file has the exact same date and
size as the local file ``file24,'' the program will skip
over that file. If the program could not get the date or
size of the remote file, or the size differs, the program
will go ahead and fetch the file.
In addition, if the local file's date is newer than the
remote file's date, the program skips the download because
it concludes you already have a more recent version.
What all this means for you is that you can use the program
to mirror another archive. For example, you might have a
task that requires you keep a mirror of all the files of a
remote directory called ``files.'' In that directory, there
might be dozens of files, some of which are updated
occasionally. You could use ncftp to help you out by
setting the appropriate local and remote directories, then
The program will skip over the old files, and only download
the files that you don't have or have been updated since the
Nonetheless, you may want to ignore the program's advice and
download a file anyway, despite the program's thinking that
you don't need to. You can use the ``-f'' flag with get to
force a download:
get -f README
You may also need to use the ``-C'' flag to force the
program to continue downloading where it left off. I
sometimes call that feature ``forced reget'' for historical
You can also turn off wildcard matching with get by using
the ``-G'' flag. Other FTP programs used the syntax
get remote-file [local-file]
which allowed you to specify a local pathname for the file
you were trying to download. NcFTP differs in that respect,
and if you used the older programs, you would find that the
program's get behaves more like those other program's mget
command. This means that in NcFTP,that
get file01 file02
tries to download remote files named ``file01'' and
``file02.'' If you like, you can get that older behavior by
using the ``-z'' flag, so:
get -z file01 ../junk/files/01.txt
would get ``file01'' and use the local name
Another thing that get does is that you can use the ``-n''
flag to fetch files that are a certain number of days old or
newer. If you just want to get the newest files at an
archive, you don't have to use a full mirror. You can just
say ``download all files that are 3 days old or newer.'' Do
that by going to a directory, and trying:
get -n 3 *
The program also has ``reget'' mode built into the get
command. Other FTP programs provided a reget command, which
was useful when you lost a connection during a download.
Instead of the remote host resending the entire file, you
could use the reget command to continue the transfer where
it was cut off.
NcFTP has this capability built-in, and it examines the date
and size of the remote file and local file to determine if
the program should continue where it left off last time. If
the dates are the same, but the local file is smaller, the
program attempts to ``reget.''
The last, and most wasteful feature of get is recursive
mode, which is turned on with the ``-R'' flag. This feature
lets you download an entire directory's contents, i.e.:
get -R /pub/info/help
That creates a directory called ``./help'' in the current
local directory, and copies all files and subdirectories
Please use some discretion with this feature. If you get a
large directory, you could really bog down the remote host.
Archive administrators are providing a public service, so
don't abuse the archive so much that they have to shut down
public access because the real users of that archive can't
get their work done.
The program has a simple macro/alias facility. You can use
macros to roll your own commands, or do things when certain
To use macros, you will need to create and edit the macros
file in your .ncftp subdirectory of your home directory.
Your ~/.ncftp directory is created for you automatically the
first time you run the program, but you have to make the
macros file yourself since most users won't have a need for
You can have any number of macros. The syntax is:
Here's a simple macro that users of the old ftp program
You could run that macro simply by running the program and
typing the macro name as if it were a regular ncftp command.
Macros can also have parameters, much like the Korn Shell's
shell functions and the C-Shell's aliases. These parameters
are sent to your macro, and if your macro uses the
appropriate ``dollar'' variables, they are expanded. To
illustrate, try this macro:
To run that macro, open a connection and try:
That would try to cd to /pub, and then try to list its
contents with ls.
Dollar variables are somewhat like those in the Bourne and
Korn shells. Example syntax:
$4 : Argument 4
$* : All arguments.
$@ : All arguments, each of them surrounded by double quotes.
$(2-5) : Arguments 2, 3, 4, and 5.
$(2,5) : Arguments 2 and 5.
$(3+) : Arguments 3, 4, 5, ..., N.
A better way to code the ``cdls'' macro might be:
There are some special macros, which I call event macros.
The program looks for macros by special names, and if they
exist, runs the macro when that event happens.
One event macro is the .start.ncftp macro. If you have a
macro by that name defined in your macros file, the program
will run that macro each time you run the program.
Similarly, there is also a .quit.ncftp macro that is run
each time you quit the program.
Another set of event macros are site-specific. For example,
if I have a site bookmarked as ``typhoon'' I could then
define macros named .open.typhoon and .close.typhoon which
would run each time I opened and closed ``typhoon.''
Another, more generic set of event macros are the .open.any
and .close.any macros which run when I open or close any
site. One possible use for these macros is to run separate
shell scripts to do some processing after you finish using a
site. I could have a macro like this:
echo "Started post-processing downloads at %H:%M:%S"
echo "Finished post-processing downloads at %H:%M:%S"
Another use is to duplicate the old macdef init hack that
the traditional ftp program used in its .netrc file. For
echo "Getting recent files list"
get -z /pub/info-mac/help/recent-files ~/docs/recent
USING COLON MODE
The colon-mode feature is used from your shell's command
In ancient times, way back during the Disco Era, you could
use a program called tftp to fetch a file using the Internet
standard Trivial File Transfer Protocol. You could use that
program to do something like this from within its shell:
and that would call wuarchive and fetch the README file.
You can use this program to do the same thing from your
shell's command line:
csh> ncftp wuarchive.wustl.edu:/graphics/gif/README
csh> head README
This tells your shell, in this case the C-shell to run
NcFTP, which would open wuarchive, fetch
/graphics/gif/README and write the file /README in the
current working directory, and then exits.
The colon-mode feature is nice if you don't want to browse
around the remote site, and you know exactly want you want.
It also comes in handy in shell scripts, where you don't
want to enter the command shell, and might not want the
program to spew output.
You can use the Uniform Resource Locator standard also. For
example, this would work:
csh> ncftp ftp://wuarchive.wustl.edu/graphics/gif/README
There are times where you might not want the program to
write a colon-mode file in the current working directory, or
perhaps you want to pipe the output of a remote file into
something else. Colon-mode has options to do this. It was
inspired by the guy who wrote the ftpcat perl script. The
``-c'' option tells the program to write on the standard
output stream. The ``-m'' option pipes the file into your
pager (like more) Of course this won't work if the thing you
give colon-mode is a directory! This example just dumps a
remote file to stdout:
csh> ncftp -c wuarc:/graphics/gif/README
This example redirects a remote file into a different
csh> ncftp -c wu:/README > ~pdietz/thesis.tex
This one shows how to use a pipeline:
csh> ncftp -c wuarc:/README | tail | wc -l
This shows how to page a remote file:
csh> ncftp -m wuarc:/graphics/gif/README
USING LINE MODE
The only reason I provide line mode is so that the primitive
operating systems whose curses library is missing or
dysfunctional won't render the program completely useless.
exceptions of the functions that require visual mode, such
as the Preferences screen and the Bookmark Editor. You will
have to edit the ~/.ncftp/prefs and ~/.ncftp/bookmarks file
manually, with a text editor.
As a small consolation, you get to use the full-powered
line-editing libraries, like GNU Readline if they were
compiled with the program.
SUMMARY OF COMMAND LINE OPTIONS
When you invoke the program from your shell, there are
``dash flags'' you can use like you can with most other UNIX
Here's a list of options you can use from the command line:
-D : Turns on debugging mode and tracing.
-V : Uses ``visual'' mode for this session.
-L : Uses ``line mode'' for this session.
-H : Prints the information from the ``version'' command and exits.
When you turn on tracing, the program writes a log with
debugging information to a file called trace in your .ncftp
subdirectory of your home directory. If you need to report
a bug, it would be helpful to mail me the trace file so I
can track it down better.
In addition to the program flags, you can also use flags
from the open and get commands with a colon mode path.
Here's a really complex example:
csh> ncftp -r -d 120 -n 3 sphygmomanometer.unl.edu:/pub/stuff/*
This tries redialing that host every two minutes, and
fetching all files from the ``/pub/stuff'' directory that
are 3 days old or newer.
NcFTP was written by Mike Gleason, (mgleason@NcFTP.com).
NcFTP is copyrighted 1995 by Mike Gleason. All rights
As of this writing, the most recent version is archived in
Ideas and some code contributed by my partner, Phil Dietz,
Thanks to everyone who has helped test the program, and sent
in feedback over the years. Your support is what drives me
to improve the program!
I'd like to thank my former system administrators, most
notably Charles Daniel, for making testing on a variety of
platforms possible, letting me have some extra disk space,
and for maintaining the UNL FTP site.
I also thank Dale Botkin and Tim Russell at Probe
Technology, for giving ncftp a home on probe.net.
For testing above and beyond the call of duty, I am
especially grateful to: Phil Dietz, Kok Hon Yin
(email@example.com), Andrey A. Chernov (firstname.lastname@example.org).
Thanks to Tim MacKenzie (email@example.com) for the
filename completion code.
Thanks to DaviD W. Sanderson (firstname.lastname@example.org), for
helping me out with the man page.
Due to a limitation in the curses library, scrolling may be
slow in visual mode.
Shell escapes, suspending (^Z) and resuming, and interruping
(^C) still have quirks with visual mode.
There are no such sites named bowser.nintendo.co.jp or
ftp(1), ftpd(8), nslookup(1), archie(1), rcp(1), tftp(1).