使用“sed”附加文本时出错

使用“sed”附加文本时出错

我有一个podman-compose文件:

version: "3.8"
services:
  kiwix-serve:
    image: docker.io/kiwix/kiwix-serve:3.3.0-1
    volumes:
      - kiwix_data:/data
      - /home/meijin3/zim/gutenberg_en_all_2022-10.zim:/data/gutenberg_en_all_2022-10.zim
      - /home/meijin3/zim/wikipedia_en_all_mini_2022-09.zim:/data/wikipedia_en_all_mini_2022-09.zim
    ports:
      - 8080:80
    command:
      /data/wikipedia_en_all_mini_2022-09.zim
      /data/gutenberg_en_all_2022-10.zim

.zim我正在尝试创建一个脚本来搜索/home/meijin3/zim/.它将替换我的撰写文件中包含.zim文件引用的任何现有行。

#!/bin/bash

yaml=example.yaml

sed -i '/.zim/d' $yaml

for i in "$(find /home/meijin3/zim/*.zim -printf '%f\n')"; do \
line1='home/emilio/zim/'"$i"':/data/'"$i"
sed -i -e "\,kiwix_data,a "'\ \ \ \ \ \ - '"$line1" "$yaml"; done

batcat $yaml

由于某种我似乎无法理解的原因,我不断收到以下错误: sed: couldn't open file ikipedia_en_all_mini_2022-09.zim:/data/gutenberg_en_all_2022-10.zim: No such file or directory

如果我只有一个文件/home/meijin3/zim/,我的脚本运行时不会出现任何问题(除了我尚未将这些行添加到命令部分这一事实之外)。

我是否没有使用正确的命令语法sed?也许问题出在其他地方。如果您能提供帮助,我们将不胜感激!

答案1

我通过将命令的输出分配find给一个数组解决了我的问题,即

zim_files=($(find /home/meijin3/zim/*.zim  -printf '%f\n'))

我修改了for循环以迭代该数组:

for i in ${zim_files[@]}; do
  sed -i -e '\,kiwix_data,a \ \ \ \ \ \ - /home/meijin3/zim/'"$i"':/data/'"$i" "$yaml"
  sed -i -e "\,command:,a "'\ \ \ \ \ \ /data/'"$i" "$yaml"
done

相关内容