复制 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.
如何复制 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.