(Linux) 用另一个文件的数据递归覆盖文件夹中的所有文件

(Linux) Recursively overwrite all files in folder with data from another file

我发现自己遇到了类似这个问题的情况: 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 图像。我不打算使用此类文件,它们会占用磁盘上大量的 space,因此我希望将它们全部转换为空 SVG,也就是我根目录中的 empty.svg 文件,即一个 12x12 的透明 SVG 文件(124 字节)。这样,框架就不会像我尝试使用该问题顶部链接的问题答案简单地用明文覆盖这些 SVG 的原始数据时那样出错。我尝试了很多方法,试图利用我的基本 Linux 命令行知识来发挥创造力,但没有成功。我该如何实现?

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

类似于link,您可以使用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 and redirections连接命令并重定向之前的命令输出。