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


88

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

假设我有“ a/myProject/.project”,我想将“ myProject/.project” 复制到“ b”,因此它是“ b/myProject/.project”,但“ b/myProject”不存在。当我尝试:

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

它只复制“ .project”文件本身,而不复制“ myProject”目录。请指教。

Answers:


153

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


7

使用tar类似的东西:

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

(未经测试。首先进行空运行,或在模型环境中尝试。)


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

4

第一次用于mkdir -p创建具有递归父路径创建的目标文件夹。然后将内容复制到目标文件夹:

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

3
cp -P a/myProject/.project b

请参阅man cp以获取更多信息。


这似乎没有帮助。它只会将“ .project”本身复制到b中,而不会复制“ myProject”。
dhblah 2010年

3

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

您的用例示例:

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

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


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

1

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

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

所以对我有用的命令是

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


-3

我使用--parents了该cp命令并与我一起工作。有关更多详细信息,请始终使用手册。谢谢。


3
不会在其他5个答案中添加任何内容。
鹿猎人

答题者请注意,Eclipse中的.project是文件而不是目录。因此,例如mkdir -pa / .project毫无意义。
ddbug '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.