Reemplazar un archivo de texto con un nombre de directorio usando el comando sed

Reemplazar un archivo de texto con un nombre de directorio usando el comando sed

Tengo la estructura de directorios de la siguiente manera:

Folder1/
  |____file.txt
Folder2/
  |____file.txt 
Folder3/
  |____file.txt
  :
Foldern/
  |____file.txt   

Cada archivo .txt en los directorios tiene una palabra que quiero reemplazar con el nombre del directorio.

archivo.txt:

"name": "Engineering",

Estoy buscando reemplazar la palabra Ingeniería con el nombre del directorio, por ejemplo, Carpeta1:

"name": "Folder1"

Mi intento inicial es el siguiente:

for f in Folder*; do (cd $f; echo $f; sed -i -e "s/Engineering/Folder*/" file.txt); done

Sin embargo, el comando sed no parece aparecer Folder*como números de carpeta.

Respuesta1

No es necesario cdingresar al directorio. Puede recorrer las rutas de los archivos y extraer el nombre de la carpeta:

for file in Folder*/file.txt; do
  sed -i -e "s/Engineering/${file%%/*}/" "$file"
done

La expansión del parámetro ${file%%/*}elimina el sufijo más largo /*y deja el nombre de la carpeta.

información relacionada