
이것은 약간 미친 짓이지만 가능한지 알고 싶습니다.
예를 들어 내 폴더에 300개의 폴더가 있고 /var/www
모두 같은 이름으로 이름이 변경될 수 있습니다.[Name](Num)
kindred (19)
거의 모든 폴더에는 이라는 파일이 있으며, package.json
모든 파일에는 name
프로젝트 이름이 포함된 키-값 쌍이 있습니다.
{
"name": "a useful project name",
......
"main": "src/index.js",
}
package.json
포함된 폴더의 이름을 파일 내의 "name" 값으로 바꾸고 싶습니다 package.json
.
답변1
json 파일을 구문 분석해야 할 때 사용할 수 있는 더 나은 도구 중 하나는 다음과 같습니다.jq
. 이렇게 하면 디렉터리의 파일 name
에서 필드를 쉽게 추출할 수 있습니다. package.json
이름 바꾸기를 수행하는 것은 간단한 쉘 스크립트입니다.
$ cd /var/www
$ for d in */; do # *1
> if [ -f "${d}package.json" ]; then # *2
> new_name=$(jq -e -M -r .name "${d}package.json") # *3
> if [ $? -eq 0 ] && ! [ -e "${new_name}" ]; then # *4
> mv "${d}" "${new_name}" # *5
> fi
> fi
> done
몇 가지 참고사항:
*1: */
현재 디렉토리 아래의 모든 디렉토리로 확장됩니다. 모든 디렉토리 이름 끝에 하나가 있으므로 /
*2와 *3 뒤에는 하나를 추가하지 않습니다.
*2: package.json
파일이 있는 디렉토리만 처리됩니다.
*3: jq
에서 이름 필드를 추출 하려면 호출하세요 package.json
. with 를 호출 jq
하여 -r
원시 문자열을 출력하고(즉, 큰따옴표 생략) -M
컬러 출력이 없으며 -e
필드가 없으면 오류와 함께 종료됩니다.jq
name
*4: jq
실행이 성공했는지( name
필드가 있음) 디렉토리의 새 이름이 아직 존재하지 않는지 확인하십시오. else
이름 바꾸기를 건너뛰는 두 경우 모두 오류 메시지를 출력하려면 분리하여 추가해야 할 수도 있습니다.
*5: 디렉토리 이름을 변경합니다.
echo
테스트 실행을 위해 명령 앞에 *5를 넣고 mv
이름 변경이 올바른지 출력을 확인했습니다. 파일 이 포함된 디렉토리가 많지 않기 때문에 직접 테스트하지 않았습니다 package.json
.