On Fri, Nov 18, 2005 at 09:45:27AM -0600, Eric Anderson wrote: > Brian Candler wrote: > >>This just adds a -o flag to cp, which preserves order. > > > > > >Hmm, that's another solution that I hadn't thought of. > > > >Advantages: simple to implement. (Even simpler if you use the ?: operator). > > > >Disadvantages: it's still strange that the default behaviour is to copy the > >files in an arbitary shuffled order. The manpage will need updating to > >document the -o flag, and hence will have to explain the strangeness. > >Commands arguably have too many flags already. > > I didn't think cp (or any tool, like tar) did it 'arbitrarily', but in > order of mtime. Is that not true? No, it's not true, for cp anyway. As far as I can tell, cp indirectly calls qsort() on the source items, using its own mastercmp() function to compare them. The only comparison it does is whether each item is a file or a directory. qsort() is not a stable sort, so even if all items compare equal, it has a habit of shuffling them around. brian_at_mappit brian$ cat x.c #include <stdio.h> #include <stdlib.h> static int foo(const void *a, const void *b) { return 0; } #define NMEM 7 int main(void) { int a[NMEM] = {1,2,3,4,5,6,7}; int i; for (i=0; i<NMEM; i++) printf("%d ", a[i]); printf("\n"); qsort(a, NMEM, sizeof(int), foo); for (i=0; i<NMEM; i++) printf("%d ", a[i]); printf("\n"); return 0; } brian_at_mappit brian$ gcc -Wall -o x x.c brian_at_mappit brian$ ./x 1 2 3 4 5 6 7 4 2 3 1 5 6 7 brian_at_mappit brian$Received on Fri Nov 18 2005 - 17:36:45 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:47 UTC