首页 > 解决方案 > 复制Linux目录结构/树**仅**没有文件并保留属性

问题描述

如何复制 Linux 目录结构/树并保留其属性

例如 foo 和 tmp 是当前工作目录中的目录。,下面这行不通

cp --preserve=all foo tmp

也不是整个目录。复制 :

cp --preserve=all -r foo tmp

这将复制目录和文件。

真正的方法如何最有效?

标签: bashdirectoryattributescopy

解决方案


这可能是使用 linux 的第一种方法,rsync其中:

rsync -a --exclude "*.*" foo/ tmp/

我们 exdlude *.*,即使用 file.extension 语法排除文件。如果你有 dir.dir 目录,它不会被复制。相反,将复制一个文件 README。


第二种解决方案更复杂,使用find, sed, mkdir, ...如下:

find foo -type d -exec bash -c "d=\"{}\"; dnew=\$(echo \$d | sed 's/^foo/tmp/') ; mkdir -p \$dnew ; chmod --reference=\$d \$dnew ; chown --reference=\$d \$dnew ; touch --reference=\$d \$dnew " \;

这严格只复制目录,忽略所有文件。保留模式、所有者、创建和修改日期等属性,但可能不会保留某些扩展目录属性。

这里

$d:旧目录

$dnew: 新目录

复制的属性:

> chmod --reference=olddir newdir # we copy modes rwx,
> chown --reference=olddir newdir # we copy owner,
> touch --reference=olddir newdir # we copy dates.

推荐阅读