【问题标题】:(Linux) Recursively overwrite all files in folder with data from another file(Linux) 用另一个文件中的数据递归地覆盖文件夹中的所有文件
【发布时间】:2021-04-20 04:21:17
【问题描述】:

我发现自己处于与此问题类似的情况: Linux: Overwrite all files in folder with specified data? 那里的答案很好用,但是,它们适用于输入的文本。请允许我提供上下文。

我有一个 Linux 终端,其文件结构如下:(已删除与问题无关的文件和文件夹)

root/
  empty.svg
  svg/
    257238.svg
    297522.svg
    a7yf872.svg
    236y27fh.svg
    38277.svg
    ... (~200 other .svg files with arbitrary names)
    2903852.svg

我正在使用的框架要求那些 .svg 文件以这些特定的文件名存在,但显然,它并不关心它们包含的 SVG 图像。我不打算使用这些文件,它们会占用大量磁盘空间,所以我希望将它们全部转换为空的 SVG,也就是我根目录上的 empty.svg 文件,这是一个 12x12 透明 SVG 文件( 124 字节)。这样,框架就不会像我尝试使用此问题顶部链接的问题的答案简单地用纯文本覆盖这些 SVG 的原始数据时那样出错。我尝试了很多方法,试图利用我的基本 Linux 命令行知识进行创造性的尝试,但没有成功。我该如何做到这一点?

TL;DR:如何使用 Linux CLI 中另一个文件的原始数据递归地覆盖文件夹中的所有文件?

【问题讨论】:

    标签: linux shell command-line command command-line-interface


    【解决方案1】:

    与链接类似,您可以使用tee 命令,但不要使用echo,而是使用cat 来复制文件内容,其中cat 是读取文件内容的命令。

    cat empty.svg | tee svg/257238.svg svg/297522.svg <etc>
    

    但是如果 svg 目录中有很多文件,使用循环来自动执行前面的命令会很有用:

    for f in svg/*; do
        if [[ "$f" == *.svg ]]; then
            cat empty.svg > "$f"
        fi
    done
    

    这里我们使用pipes和redirections来连接命令并重定向之前的命令输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      • 2019-12-29
      • 2016-08-10
      相关资源
      最近更新 更多