`--link`를 표현하거나 cp(GNU coreutils에서)의 일반 복사본으로 대체할 수 있는 방법이 있습니까?

`--link`를 표현하거나 cp(GNU coreutils에서)의 일반 복사본으로 대체할 수 있는 방법이 있습니까?

알 수 있는 방법 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를 사용하는 경우(요즘 대부분의 사람들처럼) 이는 도움이 되지 않습니다.

관련 정보