Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

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
add comment

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

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

6 Answers

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
add comment

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

share|improve this answer
add comment

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
4  
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
add comment

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:

test
|____bar
| |____1.jpg
| |____1.png
| |____1.txt
| |____2.jpg
| |____2.png
| |____2.txt
|____baz
| |____1.avi
| |____2.avi
| |____3.png
|____foo
| |____test.blah
|____test.txt

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
1  
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
add comment

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
add comment

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
add comment

Your Answer

 
discard

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