我有Eclipse项目和“.project”文件,目录结构看起来像“ myProject/.project
”。 我想将这些'.project'文件复制到另一个目录,但我想要保留封闭的目录名称。
假设我有' a/myProject/.project
',我想将' myProject/.project
'复制到' b
',所以它是' b/myProject/.project
',但' b/myProject
'不存在。 当我尝试在一个:
cp -r ./myProject/.project ../b
它只复制'.project'文件本身,没有'myProject'目录。 请指教。
你需要的开关是 – --parents
,例如:
jim@prometheus:~$ cp --parents test/1/.moo test2/ jim@prometheus:~$ ls -la test2/ total 42 drwxr-xr-x 3 jim jim 72 2010-09-14 09:32 . drwxr-xr-x 356 jim jim 43136 2010-09-14 09:32 .. drwxr-xr-x 3 jim jim 72 2010-09-14 09:32 test jim@prometheus:~$ ls -la test2/test/1/.moo -rw-r--r-- 1 jim jim 0 2010-09-14 09:32 test2/test/1/.moo
你也可以使用rsync -R
,它在cp --parents
不可用的OSX上工作。
使用类似于tar
:
mkdir b; tar cpf - myProject/ | tar xpf - -C b/
(未经testing,首先进行干运行或在模拟场景中尝试。)
首先使用mkdir -p
创buildrecursion父path创build的目标文件夹。 然后将内容复制到目标文件夹:
mkdir -pb/myProject/.project cp -ra/myProject/.project/file b/myProject/.project
cp -P a/myProject/.project b
有关更多信息,请参阅man cp
。
我使用cpio与查找相结合。 这里解释 。
您的用例示例:
find /a/myProject/.project/ -type f | cpio -p -dumv /b/.
此命令查找/a/myProject/.project/
所有文件,并在保留path的同时复制其中包含的任何文件。
除了--parents
,还需要添加-r
选项以避免省略大多数内部目录的副本
$ cp --parents test/1/.moo test2/ cp: omitting directory 'test/1/.moo'
所以对我有效的命令是
$ cp --parents -r test/1/.moo test2/
请注意,在cp --parents
似乎有一个错误。 当我和--preserve=all
一起使用 – --preserve=all
时,某些目标目录的date和时间属性不被保留。
以下链接似乎确认这是一个错误: 错误#8767:当使用–parent时,cp:–preserve = all对父母不起作用 。
所以看起来好像你不能依赖于在使用--parents
和--preserve=all
或-p
时候保存的属性。
我使用了cp
命令--parents
和perfeclty与我。 有关更多详细信息,请使用手册。 谢谢。