我如何复制一个目录树而不是Linux中的文件?

我想复制约200个目录和子目录从一个位置到另一个,但我不想复制这些目录中的数千个文件。 我在Linux上。

注意:我没有足够的空间来复制所有文件,然后删除所有文件。

刚刚发现这个:

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 ... 

你也可以这样做:

 find inputdir -type d | cpio -pdumv destdir 

简单的力量;)

另一种方法是使用findmkdir

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

只要确保TARGET已经存在或使用mkdir的-p选项。

同样,使用(GNU)tar:

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

除非你的文件名包含换行符(这是可能的,但是不太可能),否则你不需要在命令行上find-print0或者在rsync命令行上input-0 。 Tar(和rsync和cpio)逐行读取文件名; 使用一个NULL终结符是最常用的xargs ,通常读取空格分隔的文件名(所以不处理文件/目录与名称中的空格,没有-0 )。

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

这将导致这两个命令使用空值而不是空格作为分隔符。 请注意,-type d和-print0的顺序很重要!

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

将复制与硬链接的所有文件。 相同的结构,相同的权限。 (注意:硬链接,所以没有存储丢失。)