파일 이 있습니다 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