말할 cp
수 있는 방법이 있습니까 --link
(예 : 하드 링크 만들기) 장치 간 하드 링크를 시도하는 경우에 다시 사용합니까? 장치 간 링크가 불가능 cp
하여 실패 할 수 있습니다.
내가 묻는 이유는 이것을 이것을 사용하고 싶습니다. 왜냐하면 GNUmakefile
복잡하고 긴 명령 (또는 그 문제에 대한 기능)보다 읽기 쉬운 명령 줄을 선호하기 때문입니다.
문제는 GNU coreutils (7.4 및 8.13)에 관한 것입니다.
참고 : 현재 해결 방법은 (GNU make recipe 구문)과 같습니다.
cp -fl $^ $@ || cp -f $^ $@
물론 두 번째 cp
호출 에서 성공하더라도 장치 간 링크의 경우 잘못된 오류 메시지가 표시됩니다 . 또한 이것은 확장되어 (소스 형식은 읽을 수있는 것처럼 보입니다) 더 이상 읽을 수 없습니다.
답변
cp
이 옵션이 없습니다. 래퍼 스크립트를 작성할 수 있지만 매우 간단합니다.
ln -f $^ $@ 2>/dev/null || cp -f $^ $@
GNU Coreutils 7.5는이 --reflink
옵션을 도입했습니다 . 통과 --reflink=auto
하고 기본 파일 시스템이 기록 중 복사 (예 : Btrfs 또는 ZFS)를 지원하고 사본이 동일한 장치에있는 cp
경우 새 inode를 작성하지만 컨텐츠는 복사하지 않습니다. 그렇지 않으면 cp
일반 복사를 수행합니다. 이것은 여전히 하드 링크는 아니지만 (대상은 항상 다른 inode입니다) 사용 사례에 더 적합 할 것입니다. 그러나 쓰기시 복사를 지원하지 않는 ext4 (현재 대부분의 사람들과 같은)를 사용하는 경우 도움이되지 않습니다.