从包含文件的现有树创建新的空目录树

从包含文件的现有树创建新的空目录树

我有一个包含大量文件的大型目录树。

我想在新位置重新创建目录结构,但仅限于目录,而不是文件。

我已经检查了cp手册页,但没有看到有帮助的参数。

答案1

rsync -av -f"+ */" -f"- *" /.../SOURCE /.../DESTINATION

答案2

find . -type d -exec mkdir -p ~/to/{} \;

摘自@whitequark 对此问题的回答:在 Mac OS X 上复制目录结构而不复制文件

答案3

另一种方法是使用tree,它非常方便,并根据其强选项导航目录树。有仅用于目录的选项、排除空目录、排除具有模式的名称、仅包含具有模式的名称等。查看man tree

优势:您可以编辑或查看列表,或者如果您进行大量脚本编写并频繁创建一批空目录

方法:使用创建目录列表tree,使用该列表作为参数输入mkdir

tree -dfi --noreport > some_dir_file.txt

-dfi仅列出目录,打印每个名称的完整路径,使树不打印缩进线,

--noreport省略在树列表末尾打印文件和目录报告,只是为了使输出文件不包含任何无用信息

然后转到您想要空目录的目的地并执行

xargs mkdir < some_dir_file.txt

答案4

发现这个,因为我有类似的需求。使用足够新的 rsync 版本,这是你最好的选择。

如果你没有最新版本的 rsync,那么这个可以解决问题:

find path/to/source -type -d -exec mkdir path/to/dest/'{}' \; -exec chown --reference='{}' path/to/dest/'{}' \; -exec chmod --reference='{}' path/to/dest/'{}' \;

(此变体可用于权限镜像)

相关内容