Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Using the Linux command line, I use the scp command to copy up all the files and folders from a certain directory. However, I don't like to consume wasted bandwidth for copying up things I rarely change like my tiny_mce folder. What's the trick to copy up everything but skip a short list of folders?

share|improve this question

migrated from stackoverflow.com Jun 2 '11 at 0:55

This question came from our site for professional and enthusiast programmers.

rsync works fine, and in most cases, uses SSH automatically as it's transport protocol. It will compare files and only upload those that have changed - but you can also use an exclude list to specify files in the tree that shouldn't be rsynced anyhow.

share|improve this answer
rsync does not use SSH automatically - you have to supply the "-e ssh" flags to do that. – Alnitak Nov 16 '08 at 19:44
Yes, it does. Rsync 2.6.0 released - The default remote shell is now "ssh" unless you tell configure you want to make something else the default. samba.org/rsync – Rizwan Kassim Nov 16 '08 at 20:18

You could try rsync which only copies files that have changed, also works over ssh.

share|improve this answer

Using rsync --exclude is the more obvious choice here, but if you really want to just send a few files or folders and have something specific to exclude, you can use shell globing with scp. First make sure you have the right globing options set in your shell. For bash run shopt -s extglob and for zsh use setopt ksh_glob. Then something like this:

scp /path/to/folder/!(tiny_mce|other_folder|*.bak) user@host:target_path

...would copy everything in the source folder except for things matching the given pattern. Obviously you can get creative with that part.

share|improve this answer

rsync is a good solution, but if you're looking for an alternative:

Let's say, we have a directory "test" contain the directories "foo, bar, baz". In these dirs are a bunch of different file types:

| |____1.jpg
| |____1.png
| |____1.txt
| |____2.jpg
| |____2.png
| |____2.txt
| |____1.avi
| |____2.avi
| |____3.png
| |____test.blah

We want to copy everything except the PNGs

scp $(find /location/of/test -type f ! -name "*.png") # -> Note the logical NOT!!

In this example, the command will put all of the files into the same destination directory - this may not be the behavior you want.

share|improve this answer
Note that this answer only works if the file and directory names involved don't contain any shell special characters (whitespace or \[*?). – Gilles Jun 10 '11 at 21:44

A great tool you may want to try out is "lftp".

lftp sftp://etc.etc/ 
lftp> ls 
    --- remote listing ---
lftp> mirror -R -n local/ remote/

You can also use RSync over ssh

rsync -avzp -e ssh /this/dir/  remoteuser@remotehost:/remote/dir/

Should work.

share|improve this answer

I just finished writing how I prefer unison to rsync any day, since it

  • doesn't need a daemon, other than ssh for transport
  • lets me modify files on either side any time--multiple masters easily, while I only need to push a sync request from one side
  • I am a stickler when it comes to modtimes, attributes/permissions, softlinks etc. No problems with that; for one project I even use 4 mirrors, one being a cygwin host. See my example crontab setup.
  • supports exclusions like *.bak. Samples in my config file
share|improve this answer

Using Secure Copy - scp

scp -r file user@host:

To copy many file

scp /directory/* user@host:destinationPath

To copy some files

scp /directory/!(*.doc) user@host:destinationPath

It copies content of directory except .doc files

share|improve this answer

I would certainly recommend you rsync.

rsync -vra --exclude="what you want to exclude" -e ssh folder user@remotehost:/folder

share|improve this answer

Your Answer


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