我想复制约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
简单的力量;)
另一种方法是使用find和mkdir :
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
将复制与硬链接的所有文件。 相同的结构,相同的权限。 (注意:硬链接,所以没有存储丢失。)