쉘 스크립트를 통해 동적 디렉토리에서 명령 실행

쉘 스크립트를 통해 동적 디렉토리에서 명령 실행

내 홈 디렉토리는

/home/hts/.hts/tvheadend/input/dvb/networks/1d38df81855dee2d39e692ecc4caf05c/muxes

무작위로 생성된 이름을 가진 더 많은 디렉터리가 있습니다.

예:

/027941cc4936a3a3515c78487abc5445/  
/4ab4097f4089f9e6d3c062a96f027707/  
/8224af212d24d291570864021d9107a3/  
/bffd49d7d6af0f6405b1dba81df70d89/

이 폴더에는 파일("config"라는 이름)과 하위 폴더("services"라는 이름)도 있습니다. 하위 폴더 "services"에는 무작위로 생성된 이름을 가진 일부 파일이 있습니다.

예:

/home/hts/.hts/tvheadend/input/dvb/networks/1d38df81855dee2d39e692ecc4caf05c/muxes/027941cc4936a3a3515c78487abc5445/services/02f1f0807a9228c6543425c4f47312e0

"muxes" 아래의 각 폴더를 입력하고 각 폴더에 대해 하위 폴더 "services"를 입력하고 용어를 바꾸는 간단한 스크립트를 원합니다.

"enabled": true,

통과하다

"enabled": false,

해당 폴더의 모든 파일에.

답변1

댓글에 게시된 것처럼 다양한 옵션이 있습니다.

#!/bin/bash

find /home/hts/.hts/tvheadend/input/dvb/networks/1d38df81855dee2d39e692ecc4caf05c/muxes -maxdepth 1 -type d | while read ad; do
  find "$ad/config/services/" -type f -exec sed -i 's/"enabled": true,/"enabled": true,/' '{}' \;
done

또는

#!/bin/bash

dirarr=($(find /home/hts/.hts/tvheadend/input/dvb/networks/1d38df81855dee2d39e692ecc4caf05c/muxes -maxdepth 1 -type d))

for dir in ${dirarr[@]}; do
  editfile=$(ls -1 $dir/config/services/)
  sed -i 's/"enabled": true,/"enabled": false,/' $editfile
done

관련 정보