[comp.unix.i386] Copying a dirctory subtree

ted@eslvcr.UUCP (Ted Powell) (11/30/89)

In article <483@mwtech.UUCP> martin@mwtech.UUCP (Martin Weitzel) writes:
>In article <15246@haddock.ima.isc.com> suitti@anchovy.UUCP (Stephen Uitti) writes:
> ...
>>	% find . -print | cpio -ocB | (cd otherdir ; cpio -icdmB)
>>seems to work.  I know, cpio has an option to just copy the directory
>>tree without the other invocation of cpio, but cpio has lots of options...
> ...
>BTW: If memory serves, try cpio -p ...
> ...
See the last example on the (AT&T) cpio man page. I added the -a option
to the ones shown there because I wanted to preserve as many attributes 
as possible. If one executes this pipeline as root, just about everything
remains intact: ownerships, permissions, multiple links to the same
file, date stamps. I got into this because I wanted to move /usr/spool
to its own (128mb) file system, with many megabytes and lots of multiple
links already in /usr/spool/news. Note that when the destination _is_ in
the same filesystem, things go really fast, because (thanks to the -l
option) only directory entries are manipulated, and not the actual file
content. With the cpio -o | cpio -i quoted above, you are necessarily
moving all the data.
    For ease of use, I have the following alias:
	alias treeto 'find . -depth -print | cpio -padlmv'  # .cshrc
	alias treeto='find . -depth -print | cpio -padlmv'  # .kshrc
To copy the directory subtree under /foo/bar to the directory /baz/quux:
	su		# if the files aren't all yours
	cd /foo/bar
	treeto /baz/quux
-- 
ted@eslvcr.wimsey.bc.ca   ...!ubc-cs!van-bc!eslvcr!ted    (Ted Powell)