cp -a foo/* bar/
foo의 내용을 bar에 복사하여 이미 존재하는 모든 파일을 대체합니다. -n 플래그를 사용하여 cp
기존 파일을 덮어쓰지 않도록 하거나 -i
파일을 덮어쓸지 여부를 대화식으로 묻도록 할 수 있습니다.
질문
cp
파일이 이미 존재하는 경우 실패하고 오류 코드를 반환하는 방법이 있습니까 ?rsync
그렇지 않다면 다른 일반적인 도구를 사용하여 수행할 수 있습니까 ?
답변1
리눅스
Linux에 파일이 존재하는 경우 GNU를 사용한 약간의 해킹을 통해 실패할 수 있습니다 nohup
. 대화형 프롬프트가 무시 되도록 nohup
리디렉션 하지만 사용을 실패로 처리합니다./dev/null
stdin
stdin
$ nohup cp -ia foo/* bar/
조금 정리하려면 다음을 수행하십시오.
$ nohup cp -ia foo/* bar/ 2>nohup.out && rm nohup.out || cat nohup.out
- 기본적으로 및 로 리디렉션
nohup
됩니다 .stdout
nohup.out
stderr
stdout
2>nohup.out
stderr
파일에도 넣습니다 .&& rm || cat
성공하면 정리되고 오류가 발생하면 오류가 출력 됩니다nohup.out
. 오류 처리를 포함/포함하는 대신 원하는 오류 처리를 추가하거나cat
모두 제거하고$?
정상적으로 처리할 수 있습니다.- 본격적으로 사용하려면 임시 파일 위치에 대해 좀 더 현명하게 대처해야 합니다. (
mktemp -d
)
BSD
BSD에서는 0이 아닌 상태 로 처리되어 반환될 위치 stdin
로 리디렉션할 수 있습니다 .cp
n
$ cp -ia foo/* bar/ </dev/null
OSX
OSX에서는 놀랍게도 BSD와 다르게 동작하며 건너뛴 파일에 대해 cp
0이 아닌 상태를 반환합니다 .-n
$ cp -n foo/* bar/