16

I want to copy about 200 directories & subdirectories from one location to another but I don't want to copy the thousands of files within those directories. I am on Linux.

Note: I don't have enough space to copy everything then delete all the files.

25

Just found this:

rsync -a -f"+ */" -f"- *" source/ destination/

http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html

  • 2
    I prefer this syntax rsync -a --include='*/' --exclude='*' ${source} ${destination}. – Trevor Boyd Smith Jun 1 '17 at 20:11
9
find some/dir -type d -print0 | rsync --files-from=/dev/stdin -0 ...
5

Another approach is with find and mkdir:

find SOURCE -type d -exec mkdir TARGET/{} \;

Just make sure TARGET already exists or use the -p option of mkdir.

3

You also can do :

find inputdir -type d | cpio -pdumv destdir

The power of simplicity ;)

1

Similarly, using (GNU) tar:

find some/dir -type d -print |
tar --no-recursion -T- -c -p -f- |
(cd another/dir && tar -x -p -f-)

You don't really need the -print0 on the find command line or the -0 on the rsync command line unless you have filenames that contain newline characters (which is possible but highly unlikely). Tar (and rsync, and cpio) read filenames line-by-line; using a NULL terminator is mostly useful with xargs, which normally reads whitespace separated filenames (and so does not handle files/directories with spaces in their names without -0).

1
(cd /home/user/source/; find -type d -print0) | xargs -0 mkdir -p
-1
cp -al 

Would copy all files with hard links. Same structure, same permissions. (note: hard links, so no storage lost.)

  • It is not possible to create hard links across filesystem boundaries – MountainX Jun 9 '16 at 1:32
  • True, but it wasn't said that it was across filesystem ... – SvennD Jun 9 '16 at 11:48
-1

ls -d */ @source: find . -type d -print0 >dirs.txt @destination: xargs -0 mkdir -p

This will cause both commands to use nulls as separators instead of whitespaces. Note that the order of -type d and -print0 is important!

  • This is not clear and seems incorrect. It seems that the @source and @destination are indications to the reader, but even so this cannot work. – Law29 Oct 2 '18 at 5:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.