cp
não tem essa opção. Você poderia escrever um script wrapper, mas é bem simples.
ln -f $^ $@ 2>/dev/null || cp -f $^ $@
O GNU Coreutils 7.5 introduziu a opção --reflink
. Se você passar --reflink=auto
e o sistema de arquivos subjacente suportar copy-on-write (por exemplo, Btrfs ou ZFS) e a cópia estiver no mesmo dispositivo, então cp
criará um novo inode, mas não copiará o conteúdo; caso contrário, cp
executará uma cópia normal. Este ainda não é um link físico (o alvo será sempre um inode diferente), mas provavelmente é ainda melhor para o seu caso de uso. No entanto, se você estiver no ext4 (como a maioria das pessoas hoje em dia), que não suporta copy-on-write, isso não irá ajudá-lo.