[server] 소스 파일이 없을 때 ‘cp’명령으로 오류가 발생하지 않도록하는 방법은 무엇입니까?

Mac OS X를 사용하고 있습니다. 이와 같은 빌드 스크립트를 위해 cp 명령으로 일부 파일을 복사하려고합니다.

cp ./src/*/*.h ./aaa

그러나 ./src 디렉토리에 .h 파일이 없으면이 명령이 오류를 발생시킵니다. 명령이 오류를 발생시키지 않는 방법? (자동 실패) 오류로 인해 빌드 결과가 실패하지만 헤더 파일 만있을 때 복사하고 싶습니다.



답변

오류 메시지에 대해 이야기하는 경우 비트 버킷으로 보내서이를 억제 할 수 있습니다.

cp ./src/*/*.h ./aaa 2>/dev/null

종료 코드 및 오류 메시지를 표시하지 않으려면 다음을 수행하십시오.

cp ./src/*/*.h ./aaa 2>/dev/null || :


답변

당신은 라인을 따라 뭔가를 찾고 있습니다

if [ -e file ]
 then cp file /somewhere
fi

(불행히도, -f옵션은 당신이 찾고있는 드로이드가 아닙니다.)

글로브와 일치 시키려면 작동하지 않습니다. 사용하는 find대신에, 예를 들면 :

find ./src -name \*.h -exec cp {} ./destination \;


답변

오래된 질문이지만 여전히 다른 사람들과 관련이있을 수 있습니다. cp를 사용할 필요
가 없으면 rsync를 사용해보십시오.
소스에서 대상 디렉토리로 모든 파일을 복사하려면 다음을 실행하십시오.

rsync -avzh --ignore-errors /path/to/source /path/to/destination

Rsync는 Linux, Mac OS X 또는 FreeBSD와 같은 대부분의 유닉스 계열 시스템과 함께 제공됩니다.


답변

결과를 true로 파이프하면 명령이 항상 성공합니다. Linux에서는 시도했지만 Mac OS에서는 시도하지 않았습니다.

cp ./src/*/*.h ./aaa | true


답변

올바른 오류 상태를 강요 할 수 있습니다. 기능으로 :

$ cpalways () { cp $1 $2 2>/dev/null ; return 0 ; }

다음과 같이 주어진다 :

$ ls foo bar baz
ls: baz: No such file or directory
bar foo

일반 복사는 오류를 반환합니다. 종료 상태 1을 리턴합니다.

$ cp baz bar ; echo $?
cp: baz: No such file or directory
1

위의 cpalways () 함수를 사용하면 오류가 숨겨집니다.

$ cpalways baz bar ; echo $?
0
$ cpalways foo bar ; echo $?
0
$ cpalways baz bar ; echo $?
0


답변