Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I need to upload a single file to FTP server from Ubuntu. This operation should be done in a script (in non-interactive mode). What is the right syntax for ftp?

I'm trying this, to no avail:

$ ftp -u ftp://user:secret@ftp.example.com my-local-file.txt
ftp: Invalid URL `ftp://'
share|improve this question

migrated from serverfault.com Aug 15 '11 at 1:55

This question came from our site for professional system and network administrators.

    
How do I man page? –  Ignacio Vazquez-Abrams Aug 15 '11 at 2:18
1  
What do you mean? –  yegor256 Aug 15 '11 at 2:31
    
I don't know much about the ftp tool in Ubuntu, but it looks like it's choking on the ftp://. try taking that out maybe? –  Nate Koppenhaver Aug 15 '11 at 4:15

4 Answers 4

up vote 51 down vote accepted

Here is one approach:

$ ftp -n <<EOF
open ftp.example.com
user user secret
put my-local-file.txt
EOF

Alternatively, create (or edit) the ~/.netrc file in the home dir of the user that will run the ftp command, give it appropriate perms (chmod 0600 ~/.netrc), and add the following:

# ~/.netrc
machine ftp.example.com
login user
password secret

Then omit the login information, as in:

$ echo put my-local-file.txt | ftp ftp.example.com

Also, here's how you might do the same thing using curl:

$ curl -T my-local-file.txt ftp://ftp.example.com --user user:secret
share|improve this answer
    
FYI: I've noticed that I can't pass a full path of the file using the put raw command but I can with curl. –  Hengjie Jan 14 '13 at 21:55
2  
Wow, I didn't know curl supported ftp! It's super handy. –  Sebastien Jun 25 '13 at 16:25
9  
+1 for the curl solution. Why even bother with the other one? –  Asaph Oct 9 '13 at 20:55
    
@Asaph because curl is not installed where I need to do this, so the other solution came in handy. Thanks. –  bobef Sep 11 at 8:12

You need to fix the URL given in your statement. You received the error because the URL was incomplete - it was missing the name of the object you are uploading. Once you add the filename after 'example.com' as I have done below, you will see the single command does indeed work as you intended.

Try this:

ftp -u ftp://user:secret@ftp.example.com/my-local-file.txt my-local-file.txt

share|improve this answer
1  
ftp: invalid option -- 'u' –  user2529583 Aug 1 at 17:06
    
Indeed :( ftp: u: unknown option –  Webdevilopers Oct 28 at 10:24

You can also try lftp.

Here is an example:

lftp -e 'cd folder1/folder2; put /home/path/yourfile.tar; bye' -u user,password ftp.theserver.com

Refer here for more details

.

share|improve this answer

Install ncftp and use the ncftpput tool that comes along with it, pretty much something like this syntax:

ncftpput -u ftpuser -p ftppass ftphostname /path/where/to/upload localfile.name
if [ $? -ne 0 ]; then echo "Upload failed"; fi

You can even check if the upload status is good or bad. The normal ftp client can also be used along with expect.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.