命令序列
mkdir -p BASE/a/b/c && cp -a --target-directory=BASE/a/b/c /a/b/c/d
a/b/c
在 下创建一个子目录BASE
,然后将目录树复制/a/b/c/d
到BASE/a/b/c
。
它的一个问题是它需要大量重复,这会导致错误。
我可以滚动一个封装这个操作的shell函数;例如,这是一个没有任何错误检查/处理的草图:
copytwig () {
local source=$1
local base=$2
local target=$base/$( dirname $source )
mkdir -p $target && cp -a --target-directory=$target $source
}
...但我想知道这是否已经可以使用“标准”Unix 实用程序来完成(我使用“标准”作为“可能在 Unix 系统中找到,或者至少可能在Linux 系统”)。
使用
pax
(一个强制性的 POSIX 实用程序,尽管在某些 GNU/Linux 发行版中尚未默认安装):(请注意,既不是标准选项
--target-directory
也不-a
是标准cp
选项。这些是 GNU 扩展)。请注意, with
-pe
(类似于 GNU 的-a
),pax
将尝试复制目录组件的元数据(时间、所有者、权限...)(而BASE
's 的元数据将如同使用 创建的一样mkdir BASE
)。您可以使用
--parents
开关cp
来保留目录结构。编辑:抱歉,您要求提供 Unix 解决方案,但这似乎仅限于 Linux。:(