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.
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.
Just found this:
rsync -a -f"+ */" -f"- *" source/ destination/
http://psung.blogspot.com/2008/05/copying-directory-trees-with-rsync.html
find some/dir -type d -print0 | rsync --files-from=/dev/stdin -0 ...
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.
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).
cp -al
Would copy all files with hard links. Same structure, same permissions. (note: hard links, so no storage lost.)
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!