디렉터리를 복사하지만 대상 파일이 이미 있으면 실패합니다.

디렉터리를 복사하지만 대상 파일이 이미 있으면 실패합니다.

cp -a foo/* bar/foo의 내용이 bar에 복사되어 기존 파일을 대체합니다. -n 플래그를 사용하여 cp기존 파일을 덮어쓰지 않거나 -i파일을 덮어쓸지 여부를 대화식으로 묻도록 할 수 있습니다.

질문

  • cp파일이 이미 존재하는 경우 실패하고 오류 코드를 반환하는 방법이 있습니까?
  • rsync그렇지 않은 경우 사용할 수 있는 다른 일반적인 도구가 있습니까 ?

답변1

리눅스

파일이 Linux에 존재하는 경우 GNU를 통한 약간의 수정이 실패할 수 있습니다 nohup. 로 nohup리디렉션 하면 모든 대화형 프롬프트가 무시되지만 사용은 실패로 처리됩니다./dev/nullstdinstdin

$ nohup cp -ia foo/* bar/

청소해라:

$ nohup cp -ia foo/* bar/ 2>nohup.out && rm nohup.out || cat nohup.out
  • 기본적으로 및 로 nohup리디렉션됩니다 .stdoutnohup.outstderrstdout
  • 2>nohup.outstderr파일에도 넣어보세요 .
  • && rm || cat성공하면 지워지고, 오류 nohup.out가 발생하면 오류를 출력합니다. 원하는 오류 처리를 추가/포함하거나 모두 제거하여 cat정상적으로 처리할 수 있습니다.$?
  • 진지하게 사용하려면 임시 파일 위치에 대해 더 잘 알고 있어야 합니다( mktemp -d).

BSD

BSD에서는 0이 아닌 상태가 처리되어 반환되는 위치 stdin로 리디렉션할 수 있습니다.cpn

$ cp -ia foo/* bar/ </dev/null

OSX

놀랍게도 OSX의 동작은 BSD와 다르며 cp건너뛴 파일에 대해 0이 아닌 상태를 반환합니다.-n

$ cp -n foo/* bar/

관련 정보