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.

Wondering whether it's possible to specify a sort order when transferring files with scp.

For example: $ scp -r "user@host:/path/to/download/" .

[... files download in a seemingly random order ...]

Since perhaps this may be related to how scp functions, is there some way to configure ssh on the source(server)-side so that files are transfered, for example, in ascending filename order?

share|improve this question
add comment

2 Answers

I whould solve the problem with tar and the pipe-transparency of ssh. An example can be seen below, the remote PC is named bar. Before the test, I created three empty files in /tmp/foo by executing ssh bar 'mkdir /tmp/foo ; touch /tmp/foo/{a,b,c}'.

$ ssh bar 'cd /tmp/foo ; ls | sort -r | tar -cT -' | tar -xv
c
b
a
$ ls -l a b c
-rw-r--r-- 1 dnet dnet 0 nov   29 17:07 a
-rw-r--r-- 1 dnet dnet 0 nov   29 17:07 b
-rw-r--r-- 1 dnet dnet 0 nov   29 17:07 c

The -T flag of tar makes it read filenames to pack from the next parameter, and - means the standard input. Now you just need to pipe the name of the files into it, which can come from ls (as in the example) or find for trickier tasks. With this setup, you can use sort to indicate the exact order the files will be transmitted through SSH (in this case, -r sorted files in reverse alphabetic order). The -v is only added to the final, unpacking tar, so that the order is visible.

share|improve this answer
    
Woah, great lower-level approach and presenting the broader picture so clearly. Thank you. –  dimadima Nov 29 '12 at 17:35
    
How could such an approach be extended to transfer files individually instead of in an archive? Would a loop iterating over results from sort in the bar remote command somehow accomplish this? –  dimadima Nov 29 '12 at 17:45
    
It might, but I don't see the problem with transferring it as an arcive. If you think about it, there's not much difference between this approach and scp -- both send metadata and contents for each file, they just use a different "protocol". I guess you could iterate over the results, but then you should take care of files with whitespace in their names. –  dnet Nov 29 '12 at 21:56
add comment

In case this helps someone, I provided a simple solution here:

http://stackoverflow.com/questions/23067175

Still waiting for a cleverer way to do it!

share|improve this answer
1  
This is just a link. For a complete answer, provide the answer here and then provide the link for reference. –  Kevin Panko Apr 20 at 14:45
add comment

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.