폴더의 여러 파일을 반복하고 값을 할당합니다.

폴더의 여러 파일을 반복하고 값을 할당합니다.

등 의 여러 파일이 MyProperties포함된 폴더가 있습니다 . 각 파일에는 다음과 유사한 내용이 포함되어 있습니다..properties1.properties2.properties3.properties

keyname=value 

할당하거나 교체할 수 있도록 속성 파일의 값으로 여기에 무엇을 써야 합니까? 이것을 어떻게 반복하고 bash 스크립트의 키에 값을 할당할 수 있습니까?

의사코드:

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

답변1

sed다음을 사용하여 파일의 값을 바꿀 수 있습니다 .

#!/bin/bash

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

답변2

페어링된 파일이 여러 개 있는 경우 varName=value해야 할 일은 다음과 같습니다.원천그것. 따라서 모든 .properties파일을 반복하고 각 파일의 소스 코드를 가져옵니다.

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

이제 스크립트에 모든 변수가 정의되었습니다. 표시하려면:

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

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

이는 귀하의 .properties파일에 다음이 있다고 가정합니다.변수=값 쌍 외에는 없음. 구매가 이루어지면 파일의 각 줄은 구매 스크립트를 실행하는 셸에서 실행됩니다. 따라서 파일의 모든 명령 .properties도 실행됩니다. 액세스 권한이 있는 모든 공격자는 MyProperties여기에 악성 명령을 추가할 수 있습니다. 따라서 파일의 내용을 확인할 수 있는 경우에만 이 작업을 수행하십시오.

주어진 내장 경로에 문자가 .포함되어 있다는 것이 중요합니다 /(따라서 ./foo.properties위의 내용). 그렇지 않으면 파일은 현재 디렉터리(POSIX 호환 모드 및 POSIX 호환 모드가 아닌 경우) $PATH가 아닌 의 디렉터리에서 검색됩니다. )에서 찾을 수 없는 bash경우 현재 작업 디렉토리에서 . file검색 됩니다 .file$PATH

관련 정보