题 如何在Linux中复制文件保留目录路径?


我有Eclipse项目和“.project”文件,目录结构看起来像'myProject/.project”。我想将这些'.project'文件复制到另一个目录,但我希望保留封闭的目录名称。

让我们说我有'a/myProject/.project',我想复制'myProject/.project' 至 'b',所以它'b/myProject/.project',但'b/myProject'不存在。当我尝试:

 cp -r ./myProject/.project ../b

它只复制'.project'文件本身,没有'myProject'目录。请指教。


71
2017-09-14 07:52






答案:


你需要的开关是 --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

128
2017-09-14 08:34





你也可以使用 rsync -R,适用于OSX所在的地方 cp --parents 不可用。

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


13
2017-12-24 05:22





使用 tar 有类似的东西:

mkdir b; tar cpf - myProject/ | tar xpf - -C b/

(未经测试。首先进行干运行或尝试模拟方案。)


6
2017-09-14 08:39



效果出奇的好!在mac:mkdir b; tar -c -f new.tar $(cat myP); tar -x -f new.tar -C b /; #myP是文本文件,其中包含要复制的路径到文件的列表 - alexey


首次使用 mkdir -p 使用递归父路径创建创建目标文件夹。然后将内容复制到目标文件夹:

mkdir -p b/myProject/.project
cp -r a/myProject/.project/file b/myProject/.project

4
2018-06-02 22:59





cp -P a/myProject/.project b

看到 man cp 欲获得更多信息。


3
2017-09-14 08:06



这似乎没有帮助。它只将'.project'本身复制到b中,但它不会复制'myProject'。 - dhblah


我将cpio与find结合使用。 这里解释

用例示例:

find /a/myProject/.project/ -type f | cpio -p -dumv /b/.

此命令查找中的所有文件 /a/myProject/.project/ 和复制,同时保留路径,包含在其中的任何文件。


2
2018-03-17 09:40



.project是一个文件,而不是dir! - ddbug


另外 --parents 它还需要添加 -r 选项,以避免省略大多数内部目录的副本

$ cp --parents test/1/.moo test2/
cp: omitting directory ‘test/1/.moo’

所以对我有用的命令是

$ cp --parents -r test/1/.moo test2/

1
2017-07-29 19:59





请注意,似乎有一个错误 cp --parents。我用的时候 --parents 随着 --preserve=all,SOME的日期和时间属性 目标目录未保留。

以下链接似乎证实这是一个错误: bug#8767:cp: - expand = all对于父母不适用--parent是 用过的

所以看起来好像你不能依赖于使用时保留的属性 --parents 与...一起 --preserve=all 要么 -p


0
2017-10-15 11:38





我用了 --parents 随着 cp 指挥和工作perfeclty与我。有关详细信息,请始终使用手册。 谢谢。


-3
2018-05-15 07:44



不向其他5个答案添加任何内容。 - Deer Hunter
Answerers请注意,Eclipse中的.project是一个文件,而不是目录。所以例如mkdir -p a / .project毫无意义。 - ddbug