Este problema solo ocurre en el contenedor acoplable.
Solo findestá bien:
find ${BASIN_SPIDER_CONFIG_PATH} -type f -name "*.json"
find con sed
find ${BASIN_SPIDER_CONFIG_PATH} -type f -name "*.json"|xargs sed -i "s/10.142.55.199/host02/g"
da un error:
/xxx/config/sed8Ey5tD: Device or resource busy
No entiendo lo que es sed8Ey5tD, lsno puedo verlo. Creo que es por docker, pero no puedo entenderlo.
¿Cómo hacer el sedéxito?
OK, he encontrado que el archivo está siendo volumed por estibador, existe volumes: /xxx/config.json : /xxx/config/config.json en docker-compose.yml. Después docker-compose down, el archivo se puede editar. Pero, ¿cómo edito el archivo sin docker-compose down?

sed. Cuando realice una modificación en el lugar,sedcreará un archivo temporal para trabajar para evitar corromper su original. Si algo salió bien, entonces reemplaza el original por uno temporal. Pero cual es tu pregunta? ¿Quieres saber qué causa ese error o qué es elsed8Ey5tDarchivo?sedpara que no haya un archivo de respaldoxargs sed -i'' "s/10.142.55.199/host02/g"(agregue comillas simples justo después de la-iclave)Respuestas:
Sí, como descubrió, el archivo está montado por docker, lo que significa que no puede cambiar su inodo desde el contenedor de docker. Pero, ¿qué sucede si solo cambia el contenido del archivo sin tocar su inodo, funciona? Claro que si. Por lo tanto, todo lo que necesita hacer es encontrar una manera de cambiar el contenido del archivo original únicamente, en lugar de crear un nuevo archivo y luego reemplazar el original.
El comando
sedcon opción-icrea un archivo nuevo y luego reemplaza el archivo antiguo por el nuevo, lo que definitivamente cambiará el inodo del archivo. Por eso te da el error.Entonces, ¿qué formas pueden cambiar el contenido del archivo? De muchas maneras
echo abc > filecp, por ejemplo,cp new oldLe damos varios ejemplos de cómo solucionar su problema:
El
cpcamino:buscar $ {BASIN_SPIDER_CONFIG_PATH} -tipo f -name "* .json" | xargs -L1 fiesta -c 'sed "s / 10.142.55.199 / host02 / g" $ 1> /tmp/.intermediate-file-2431; cp /tmp/.intermediate-file-2431 $ 1; ' -El
vimcaminocat> / tmp / vim-temp-script << EOF : establezca nobackup backupcopy = yes : let i = 0 : mientras 1 : sea i + = 1 :% s / 10.142.55.199 / host02 / g : si i> = argc () : rotura : terminara si : wn : mientras tanto : wq EOF encuentra $ {BASIN_SPIDER_CONFIG_PATH} -tipo f -name "* .json" | xargs vim -s / tmp / vim-temp-scriptEl
edcaminoencuentre $ {BASIN_SPIDER_CONFIG_PATH} -tipo f -name "* .json" | xargs -L1 bash -c 'ed $ 1 << EOF , s / 10.142.55.199 / host02 / g wq EOF '-fuente
En mi opinión, la forma más fácil de hacerlo es usar lo siguiente en un Dockerfile:
fuente