bash - 复制Linux目录结构/树**仅**没有文件并保留属性
问题描述
如何仅复制 Linux 目录结构/树并保留其属性
例如 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:旧目录
$dnew: 新目录
复制的属性:
> chmod --reference=olddir newdir # we copy modes rwx, > chown --reference=olddir newdir # we copy owner, > touch --reference=olddir newdir # we copy dates.