我想将一个复杂的目录结构从一台 Linux 服务器复制到另一台远程服务器,从某个子目录开始。
我不需要文件的内容,我只想保留结构、所有者和权限,因为要克隆的服务器包含大量数据,不能复制到新机器上。
我猜想这可以通过将文件夹结构打包并在远程机器上解包来实现。或者通过使用 rsync 进行复制而不发送数据。或者通过使用 find 创建 shell 脚本来实现。
如果有人手头有完成此任务的一行程序,我将不胜感激。
答案1
您可以组合find
和cpio
从当前工作目录中创建子目录列表,如下所示:
find . -type d -print | cpio -oO dirs.cpio
要在远程计算机上重建目录层次结构,请将文件复制dirs.cpio
到所需位置并运行:
cpio -iI dirs.cpio
答案2
一个解决方案可能是
find . -type d > dirs
找到目录,然后使用该文件-T
的选项tar
:
tar cpzT dirs -f dest_file.tar.gz
它应该创建一个压缩档案 ( ),通过仅存档列出的文件 ( )z
来保留权限 ( ) 。传输文件,使用以下命令解压p
T dirs
tar xpzf dest_file.tar.gz
你就完成了。
答案3
使用rsync
递归地将源路径下的目录复制到目标目录:
rsync --archive --verbose --filter="+ */" --filter="- *" /path/to/src/ /path/to/dest/
rsync --archive --verbose --filter="+ */" --filter="- *" /path/to/apache/logs/ user@domain:/path/to/apache/logs/
使用选项--include
和--exclude
代替--filter
旧版本的规则rsync
:
rsync --archive --verbose --include="*/" --exclude="- *" /path/to/src/ /path/to/dest/
rsync --archive --verbose --include="*/" --exclude="*" /path/to/apache/logs/ user@domain:/path/to/apache/logs/