Iterar vários arquivos em uma pasta e atribuir valor

Iterar vários arquivos em uma pasta e atribuir valor

Eu tenho uma pasta chamada MyPropertiese contém vários .propertiesarquivos como 1.properties, e 2.propertiesassim 3.propertiespor diante. Cada arquivo contém algo como:

keyname=value 

O que devo escrever aqui como valor no arquivo de propriedades para que ele seja atribuído ou substituído? Como faço para iterar sobre eles em um script bash e atribuir o valor à chave?

Pseudo-código:

#!/bin/bash
valuetobepassed="something"
#iterate over each file in the folder and replace/assign value corresponding to keyname

Responder1

Você pode usar sedpara substituir valores em arquivos:

#!/bin/bash

new_value=5
for f_name in MyProperties/*.properties; do
     sed -i "s/^keyname=.*$/keyname=$new_value/" "$f_name"
done

Responder2

Se você realmente tiver vários arquivos com varName=valuepares, tudo o que você precisa fazer éfonteisto. Portanto, itere todos .propertiesos arquivos e forneça cada um deles:

for file in /path/to/MyProperties/*.properties; do
    . "$file"
done

Agora você tem todas as suas variáveis ​​definidas no seu script. Ilustrar:

$ cat foo.properties 
foo="bar"
$ echo "$foo"  ## no value

$ . ./foo.properties 
$ echo "$foo"
bar

Isso pressupõe que seus .propertiesarquivos tenhamnada além de pares variável = valor. Ao sourcing, cada linha do arquivo será executada no shell executando o script que faz o sourcing. Assim, quaisquer comandos em seus .propertiesarquivos também serão executados. E qualquer invasor com acesso MyPropertiespode adicionar um comando malicioso lá. Portanto, faça isso apenas se tiver certeza do conteúdo dos arquivos.

Observe que é importante que o caminho fornecido ao .builtin contenha um /caractere (daí o ./foo.propertiesacima), caso contrário, o arquivo será procurado nos diretórios de $PATHem vez do diretório atual (no caso bashe quando não estiver no modo de conformidade POSIX, . fileprocura por fileno diretório de trabalho atual se não tiver sido encontrado em $PATH).

informação relacionada