"파일이 이미 존재하기 때문에" "cp -f"가 실패했습니다.

"파일이 이미 존재하기 때문에" "cp -f"가 실패했습니다.

설치 후 스크립트가 실행 중이지만 cp -f ./foo/a.json ./node_modules/bar/a.json파일이 이미 존재한다는 오류로 인해 실패합니다(파일이 존재하지만 내 버전으로 덮어쓰려고 합니다).

파일이 존재하더라도 해당 플래그의 요점은 -f강제 덮어 쓰기를 보장하는 것이 아닙니까?

가능한 별칭을 재정의하려고 시도했지만 결과는 동일했습니다 cp. \cp이는 실행 중인 docker 빌드 실행 내에서 발생하며 npm install, npm postinstall 스크립트가 시작됩니다.

다음은 요청된 Docker 빌드 출력의 예입니다.

#10 82.12 npm WARN lifecycle [email protected]~postinstall: cannot run in wd [email protected] node -e "try{require('./postinstall')}catch(e){}" (wd=/node_modules/core-js)
#10 82.22 
#10 82.22 > [email protected] postinstall /usr/local/lib/node_modules/xxx-cli
#10 82.22 > command cp -f ./foo/a.json ./node_modules/xxx-library/assets/a.json
#10 82.22 
#10 82.31 cp: can't create './node_modules/xxx-library/assets/a.json': File exists

도움을 주시면 감사하겠습니다!

답변1

-f아니요, 그게 목적이 아닙니다 . GNU coreutils' ( 이미 Linux와 Bash가 실행 중이라고 말씀하셨기 때문에 cp이것을 사용하고 있다고 가정합니다 .)cp기본씌우다콘텐츠기존 대상 파일. (를 사용하여 명시적으로 비활성화해야 합니다 -n.)

대상 파일이 존재하지만 어떤 이유로든 열 수 없는 경우 -f파일을 변경하고 삭제한 다음 새 파일을 만들고 해당 파일을 원본 데이터로 채웁니다. 이는 해결책도 아니고 현재의 문제도 아닌 것 같습니다.

당신은되고 싶을 수도 있습니다매우오류 메시지의 내용을 그대로 기록합니다.

어쨌든 cat ./foo/a.json > ./node_modules/bar/a.json효과가 있나요? cp ./foo/a.json ./node_modules/bar/a.json대상의 내용을 소스로 덮어쓴다는 점에서는 실제로 귀하의 것과 동일합니다 .

답변2

답변이므로 질문에서 이동했습니다.

알고 보니 이 모든 질문은 무의미합니다. 문제의 dockerfile은 -g전역적으로 설치된 모듈을 사용하여 npm install을 호출하므로 bcos 권한의 파일을 덮어쓸 수 없거나 node_modules해당 파일이 내가 생각하는 위치에 있지 않기 때문입니다. 제거 -g하고 교체하면 ci모든 것이 예상대로 작동합니다.

관련 정보