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

假设我有'a/myProject/.project',我想将'myProject/.project'复制到' b,因此它是b/myProject/.project,但不存在b/myProject。当我尝试以下操作时:
 cp -r ./myProject/.project ../b


它仅复制'.project'文件本身,而不复制'myProject'目录。请指教。

#1 楼

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


#2 楼

您还可以使用rsync -R,它可以在无法使用cp --parents的OSX上使用。

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

#3 楼

tar与以下类似的东西一起使用:

评论


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

–alexey
16年8月23日在21:14



#4 楼

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

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


#5 楼

cp -P a/myProject/.project b


有关更多信息,请参见man cp

评论


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

– dhblah
2010-09-14在8:11



#6 楼

我将cpio与find结合使用。

您的用例示例:

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


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

评论


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

–ddbug
16-10-15在11:12

#7 楼

除了--parents,还需要添加-r选项,以避免遗漏大多数内部目录的副本。
>
$ cp --parents test/1/.moo test2/
cp: omitting directory ‘test/1/.moo’


#8 楼

请注意,cp --parents中似乎存在一个错误。当我同时使用
--parents--preserve=all时,未保留SOME
目标目录的日期和时间属性。 #8767:cp:--preserve = all在使用--parent时对父母不起作用。

因此,似乎您不能依赖于保留的属性当使用
--parents以及--preserve=all-p等时。

#9 楼

我将--parentscp命令一起使用,并且与我完美配合。有关更多详细信息,请始终使用手册。
谢谢。

评论


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

–鹿猎人
15年5月15日在8:40

答题者请注意,Eclipse中的.project是文件而不是目录。所以mkdir -p a / .project没有任何意义。

–ddbug
16-10-15在11:10