ファイルがあります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