如何在Linux中复制文件保存目录path?

我有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上工作。

https://stackoverflow.com/a/13855290/598940

使用类似于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与我。 有关更多详细信息,请使用手册。 谢谢。