【问题标题】:Rpmbuild copying folders specified by a mapping filerpmbuild 复制映射文件指定的文件夹
【发布时间】:2018-06-25 11:53:38
【问题描述】:

目前,正在使用 rhel。需要创建一个可以使用映射文件的脚本(源和目标需要是动态的)。映射文件应使用什么文件类型(.csv、.txt、.json)?

  • 用斜杠结束目录,例如src/
  • -r 可用于文件,例如cp -r src/file.fil tgt/
  • 脚本将由规范文件启动,文件将在构建期间复制
  • 源和目标需要是动态的

脚本示例

cp -r src/file.fil tgt/

映射文件

<src>\t<tgt>\n 例如src/file.fil \t tgt/ \n'src/file.fil'\t'tgt/'\n

【问题讨论】:

  • 你的外壳是什么?重击?手册页中的 -r 用于递归复制。
  • 重击。是的,我知道。我正在尝试找出 bash 脚本将从中读取的映射文件的文件类型。
  • 这与rpmbuildrhel 标签有什么关系?
  • 标签已被删除。 @iamauser
  • 也许您应该生成一堆install 命令并通过脚本将它们写入您的.spec 文件的%files 部分?拥有一个骨架 .spec.in 模板然后以编程方式生成最终可交付成果的情况并不少见,也许是通过一个简单的 sed 脚本。

标签: bash cp


【解决方案1】:

xargs 可以用于此

xargs --arg-file your-file.txt cp

文件应该包含像

这样的行
file1 tgt/
file2 tgt/

如果你的目标是不变的,或者从一个只有源文件名的文件中读取一个 for 循环

for f in $(cat yourfile.txt); do
    cp "$f" tgt/
done

甚至

while read src tgt; do
    cp "$src" "$tgt"
done < yourfile.txt

【讨论】:

  • 这不起作用,因为tgt 目录需要是动态的。 file2 可能需要转到不同的文件路径。
  • 所以你的文件应该包含那个映射,file1 tgt1/ file2 tgt2/ 等等。对吗?
  • 投反对票;仍然损坏,如下所示:stackoverflow.com/questions/48308990/…
  • 循环基本上是要走的路,但两种尝试都遇到了新手问题;通过shellcheck.net 运行它们以获取详细信息。
  • 新手?! @tripleee
猜你喜欢
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
相关资源
最近更新 更多