「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

fileが1つしかない場合、/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

おすすめ記事