2009-10-30 154 views
70

我希望:击:复制递归命名文件,保存文件夹结构

cp -R src/prog.js images/icon.jpg /tmp/package 

将产生一个对称结构在目标目录:

/tmp 
| 
+-- package 
    | 
    +-- src 
    | | 
    | +-- prog.js 
    | 
    +-- images 
     | 
     +-- icon.jpg 

而是,这两个文件被复制进入/ tmp /包。平面副本。 (这是在OSX上)。

是否有一个简单的bash功能我可以用它来复制所有文件,包括通过通配符指定的文件(例如SRC/*。JS)到目标目录中应有的地位。有点像“对于每个文件,运行mkdir -p $(dirname "$file"); cp "$file" $(dirname "$file")”,但也许只有一个命令。

This is a relevant thread, which suggests it's not possible.作者的解决方案对我来说并不是那么有用,因为我想简单地提供一个文件列表,通配符或不是,并且将它们全部复制到目标目录。 IIRC MS-DOS xcopy可以做到这一点,但似乎没有cp的等价物。

回答

111

您是否尝试过使用--parents选项?我不知道OS X是否支持这个功能,但是这对Linux有效。

cp --parents src/prog.js images/icon.jpg /tmp/package 

如果没有在OS X上工作,尝试

rsync -R src/prog.js images/icon.jpg /tmp/package 

为AIF建议。

+0

好,所以我说得太快了。我最喜欢这个答案。 – EMPraptor 2009-10-30 15:07:54

+3

谢谢。事实证明,“cp -parents”在mac上是不可能的,但很高兴知道其他unixen的标志。 rsync -R是此问题最简单的便携式解决方案。 – mahemoff 2009-11-01 01:42:34

+1

我接受了它的优雅/可记性,但刚刚发现这并不复制整个目录(至少在OSX上),而下面的tar是。 – mahemoff 2012-07-23 14:21:12

20

方式一:

tar cf - <files> | (cd /dest; tar xf -) 
+0

哦,我喜欢这个远远超过我的回答更好。 – EMPraptor 2009-10-30 14:55:59

+3

你也可以使用'-C'选项为你做chdir - 'tar cf - _files_ | tar -C/dest xf -'或类似的东西。 – 2009-10-30 15:05:37

+0

感谢,这是简洁的,但我更喜欢简单rsync。 – mahemoff 2009-11-01 01:43:12

1

尝试...

for f in src/*.js; do cp $f /tmp/package/$f; done 

这样对你最初做的事情......

for f in `echo "src/prog.js images/icon.jpg"`; do cp $f /tmp/package/$f; done 

v="src/prog.js images/icon.jpg"; for f in $v; do cp $f /tmp/package/$f; done 
13

另外,如果你是老派的,使用的cpio:

cd /source; 
find . -print | cpio -pvdmB /target 

显然,可以过滤文件列表到你的心脏的内容。

在“-p”选项关于“直通”模式(如针对“-i”的输入或“-o”的输出)。 '-v'是详细的(在处理文件时列出文件)。 '-m'保留修改时间。 '-B'表示使用'大块'(其中大块是5120字节而不是512字节);有可能这些日子没有任何效果。

+0

过滤的最佳答案!谢谢 – milkplus 2014-01-17 18:47:57

13

rsync's -R option会做你的期望。这是一款功能非常丰富的文件复印机。例如:

$ rsync -Rv src/prog.js images/icon.jpg /tmp/package/ 
images/ 
images/icon.jpg 
src/ 
src/prog.js 

sent 197 bytes received 76 bytes 546.00 bytes/sec 
total size is 0 speedup is 0.00 

样品结果:

$ find /tmp/package 
/tmp/package 
/tmp/package/images 
/tmp/package/images/icon.jpg 
/tmp/package/src 
/tmp/package/src/prog.js 
相关问题