동일한 파일을 모두 한 위치에 복사하고 파일 이름을 하위 디렉터리_파일 이름으로 변경합니다.

동일한 파일을 모두 한 위치에 복사하고 파일 이름을 하위 디렉터리_파일 이름으로 변경합니다.

아래와 같이 다른 폴더에 conf.yml 파일이 있습니다.

/var/loyalty-badge/conf/conf.yml
/var/loyalty-level/conf/conf.yml
/var/promotion/conf/conf.yml
/var/featured/conf/conf.yml

이제 나는 그들 모두가 conf.ymlconf와 같은 폴더를 복사하기를 원합니다.

대상 파일은 다음과 같아야합니다

conf/loyalty-badge_conf.yml
conf/loyalty-level_conf.yml
conf/promotion_conf.yml
conf/featured_conf.yml

스크립트를 제안해 주실 수 있나요?

답변1

당신은 간단하게 사용할 수 있습니다와일드카드 패턴파일을 열거합니다 …/conf/conf.yml. 사용하다for 루프파일을 반복합니다.

for x in /var/*/conf/conf.yml; do …

바로 다음 부분을 추출해야 합니다 /var. 당신은 이것을 할 수 있습니다쉘 확장기능: 접두사와 접미사를 제거합니다. 두 단계로 수행합니다. /var접두사를 제거한 다음 /conf/conf.yml접미사를 제거합니다.

y=${x#/var}; y=${y%%/*}

이제 서로 붙입니다.

for x in /var/*/conf/conf.yml; do …
  y=${x#/var}; y=${y%%/*}
  cp -p "$x" "conf/${y}_conf.yml"
done

" 텍스트 뒤에 오는 값" ${y}_conf.yml으로 구문 분석되므로 중괄호가 필요합니다 .$y_conf.ymly_conf.yml

관련 정보