复制 Linux 目录 structures/tree **仅** 没有文件并保留属性

To copy Linux directory structures/tree **only** without files and preserve attributes

如何复制 Linux 目录 structures/tree 并保留其属性

例如foo 和 tmp 是当前工作目录中的目录,下面这个不起作用

cp --preserve=all foo tmp

也不是 整个 目录。复制 :

cp --preserve=all -r foo tmp

这将同时复制目录和文件。

真正的方法怎样才是最有效的方法?

这可能是第一种方法,使用 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: old directory

$dnew: new directory

复制的属性:

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