...making Linux just a little more fun!
Terry T [timburwa at gmail.com]
Hie I am new UNIX.I want to copy 30 files with different names using the following command.
ftp -i -s:filename > logfilename.log
The command works well.
My problem is to type the same command 30 times for each file name. How do I transfer all the 30 files at the same time?
Thomas Adam [thomas.adam22 at gmail.com]
On 08/10/2007, Terry T <timburwa at gmail.com> wrote:
> Hie > I am new UNIX.I want to copy 30 files with different names using the > following command. > > ftp -i -s:filename > logfilename.log > > The command works well.
This is what the mcopy FTP command is supposed to do.
> My problem is to type the same command 30 times for each file name. > How do I transfer all the 30 files at the same time?
You're most likely wanting a glob, or some iterative counter (or both), but until you tell us how these thrity filenames are related, none of us can help you.
-- Thomas Adam
Paul Sephton [paul at inet.co.za]
On Mon, 2007-10-08 at 09:16 +0200, Terry T wrote:
> Hie > I am new UNIX.I want to copy 30 files with different names using the > following command. > > ftp -i -s:filename > logfilename.log > The command works well. > > My problem is to type the same command 30 times for each file name. > How do I transfer all the 30 files at the same time?
MASK=*; for i in `ls $MASK`; do ftp -i -s:$i > logfilename.log done
where MASK is your file selection...
Neil Youngman [ny at youngman.org.uk]
On or around Monday 08 October 2007 08:16, Terry T reorganised a bunch of electrons to form the message:
> Hie > I am new UNIX.I want to copy 30 files with different names using the > following command. > > ftp -i -s:filename > logfilename.log > > The command works well. > > My problem is to type the same command 30 times for each file name. > How do I transfer all the 30 files at the same time?
That looks like a different ftp client to the one I have. My man page does not show a -s option. There are as always a number of possible solutions.
You can use an ftp client that allows you to specify multiple files on the command line, e.g. ncftpput
Alternatively you can use a loop. If you are using the BASH shell a loop to send all files with the .txt extension in the current directory would look like
for file in *.txt do ftp -i -s:$file done > logfilename.log 2>&1
If you want to see error messages on the screen, while still capturing them in the log, you can use tee, e.g.
for file in *.txt do ftp -i -s:$file done 2>&1 | tee logfilename.log
HTH
Neil Youngman
Ben Okopnik [ben at linuxgazette.net]
On Mon, Oct 08, 2007 at 09:47:33AM +0200, Paul Sephton wrote:
> On Mon, 2007-10-08 at 09:16 +0200, Terry T wrote: > > Hie > > I am new UNIX.I want to copy 30 files with different names using the > > following command. > > > > ftp -i -s:filename > logfilename.log > > The command works well. > > > > My problem is to type the same command 30 times for each file name. > > How do I transfer all the 30 files at the same time? > > MASK=*; for i in `ls $MASK`; do
There's no advantage to this over plain old
for i in *; do
-- * Ben Okopnik * Editor-in-Chief, Linux Gazette * http://LinuxGazette.NET *
Paul Sephton [paul at inet.co.za]
On Mon, 2007-10-08 at 08:22 -0400, Ben Okopnik wrote:
> There's no advantage to this over plain old > > `` > for i in *; do > ''
True.
Ben Okopnik [ben at linuxgazette.net]
On Mon, Oct 08, 2007 at 09:16:18AM +0200, Terry T wrote:
> Hie > I am new UNIX.I want to copy 30 files with different names using the > following command. > > ftp -i -s:filename > logfilename.log > > The command works well. > > My problem is to type the same command 30 times for each file name. > How do I transfer all the 30 files at the same time?
As Thomas has already mentioned, the standard ftp client doesn't support the 's:filename' syntax - I can't say that I've ever seen one that does, myself. However, even with that available, it still may not be a great idea to loop over the file list; first, you may not have the list locally (after all, the files are remote!); second, unless your files are really huge, the overhead of logging in and logging out every time (whether it's automatic or not) is going to be significant - not to mention time-consuming and requiring constant interaction.
You'd be much better off using the 'mget' command in the standard client (don't forget to turn off the prompt - otherwise you'll be asked to confirm each filename before downloading):
you at localhost:~$ cd /your/download/directory you at localhost:~$ ftp your_remote_host [log in with username and password] ftp> prompt Interactive mode off. ftp> cd remote/directory/where/your/files/are 250 Directory successfully changed. ftp> mget * ...
Another way to do it is by using a more modern, capable FTP client - e.g., 'ncftpget' or something similar. Personally, I prefer to use my favorite file manager, Midnight Commander; it allows me to have a local directory open in one pane while I have a directory on the remote host open in another. I then select the files I want by using the 'Insert' key to highlight them, and press 'F5' to copy; 'mc' takes care of remembering all the funky FTP commands.
-- * Ben Okopnik * Editor-in-Chief, Linux Gazette * http://LinuxGazette.NET *