Bash:递归复制命名文件,保留文件夹结构

标签 bash shell

我希望:

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/

相关文章:

bash - 将不同的文件夹放在同一个存储库下

bash - 多个 cronjob 电子邮件

linux - 如何通过/bin/sh解析HTTP头?

linux - 为 shell 脚本创建桌面快捷方式

linux - 跨行比较文件值

Android ADB shell 命令 : Mount host PC folder?

python - 为什么我不能用 ipython 访问 Django 的 shell 中的导入函数?

linux - 编写脚本,为每个可写的普通类型文件制作编号列表

bash - 如何从文件列表中删除路径部分并将其复制到另一个文件中?

function - Bourne shell 函数返回变量始终为空