'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 이 하나만 있는 경우 /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

관련 정보