%EC%9D%98%20%EC%9D%BC%EB%B0%98%20%EB%B3%B5%EC%82%AC%EB%B3%B8%EC%9C%BC%EB%A1%9C%20%EB%8C%80%EC%B2%B4%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
알 수 있는 방법 cp
( --link
예: 하드 링크 생성)이 있지만 장치 간에 하드 링크를 시도하는 경우를 대비하여 대체할 수 있습니까? 장치 간 연결이 불가능하며 cp
오류가 발생합니다.
내가 묻는 이유는 이것을 GNUmakefile
명령줄에서 사용하고 싶고 복잡하고 긴 명령줄(또는 기능)보다는 읽을 수 있는 명령줄을 선호하기 때문입니다.
문제는 GNU coreutils(7.4 및 8.13)에 대한 것입니다.
참고: 현재 솔루션은 (GNU make Recipe 구문)과 유사합니다.
cp -fl $^ $@ || cp -f $^ $@
물론, 장치 간 링크의 경우 두 번째 cp
호출이 성공하더라도 가짜 오류 메시지가 표시됩니다. 게다가 확장되면(결국 소스 양식은 읽을 수 있는 것처럼 보임) 더 이상 읽기가 쉽지 않습니다.
답변1
cp
그러한 옵션은 없습니다. 래퍼 스크립트를 작성할 수도 있지만 이는 매우 간단합니다.
ln -f $^ $@ 2>/dev/null || cp -f $^ $@
--reflink
이 옵션은 GNU Coreutils 7.5에서 도입되었습니다 . 통과 --reflink=auto
하고 기본 파일 시스템이 쓰기 중 복사(예: Btrfs 또는 ZFS)를 지원하고 복제본이 동일한 장치에 있으면 cp
새 inode가 생성되지만 내용은 복사되지 않습니다 cp
. 복사가 수행됩니다. 이는 여전히 하드 링크는 아니지만(대상은 항상 다른 인덱스 노드임) 사용 사례에 더 적합할 수 있습니다. 그러나 기록 중 복사를 지원하지 않는 ext4를 사용하는 경우(요즘 대부분의 사람들처럼) 이는 도움이 되지 않습니다.