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/