我希望:
cp -R src/prog.js images/icon.jpg /tmp/package
将在目标目录中产生对称结构:
/tmp
|
+-- package
|
+-- src
| |
| +-- prog.js
|
+-- images
|
+-- icon.jpg
但是,这两个文件都被复制到/tmp/package 中。平面副本。 (这是在 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 的等价物。
最佳答案
您是否尝试过使用 --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 的建议。
关于Bash:递归复制命名文件,保留文件夹结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1650164/