我希望:
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")
”,但也许一个命令。
这是一个相关的线程,这表明这是不可能的。 笔者的解决方案是不是对我非常有用,但因为我想简单地提供文件,通配符与否的名单,并有所有的人都复制到目标目录。 IIRC MS-DOS XCOPY做到这一点,但似乎没有类似的CP。
您是否尝试过使用--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建议。
单程:
tar cf - <files> | (cd /dest; tar xf -)
另外,如果你是老派的,使用的cpio:
cd /source;
find . -print | cpio -pvdmB /target
显然,可以过滤文件列表到你的心脏的内容。
的“-p”选项是关于“直通”模式(如针对“-i”的输入或“-o”的输出)。 在“-v”是详细(列出的文件,因为它们可以处理)。 在“-m”保存修改时间。 在“-B”手段使用“大块”(其中大块是5120个字节,而不是512个字节); 有可能它没有任何效果,这些天。
rsync的的-R选项会做你的期望。 这是一个非常丰富的功能,文件复印机。 例如:
$ 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
尝试...
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