coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Feature request] Make `cp --link` work for symlinks on MacOS somehow


From: Marcin Owsiany
Subject: [Feature request] Make `cp --link` work for symlinks on MacOS somehow
Date: Mon, 28 Sep 2020 10:33:20 +0200
User-agent: Mutt/1.10.1 (2018-07-13)

Hello,

TL;DR: could I ask for a flag that would make `cp --link` not use
hardlinks in case the file copied is a symlink?

Some background:

A user of my script (which calls `cp --archive --link` under the hood,
on a directory which contains symlinks) reported recently that it does
not work on a MacOS filesystem. The user was running it in a Linux
docker container on top of a MacOS system (docker actually uses a VM to
run Linux in that case), where the filesystem was mounted from the host
MacOS system.

The script, when effectively running `cp --archive --link source-dir
destination-dir` failed after printing:

cp: cannot create hard link 'destination-dir/mnist' to 'source-dir/mnist': 
Operation not permitted
cp: cannot create hard link 'destination-dir/mnist.npz' to 
'source-dir/mnist.npz': Input/output error

In that case "source-dir/mnist" was a symlink to a directory, and
"source-dir/mnist.npz" was a symlink to a regular file.

This was really surprising to me, and after some investigation it turned
out that even the native MacOS `ln` is not able to make a hardlink of a
symlink.

I'm guessing this is some kind of MacOS limitation and/or design choice,
and not likely to change any time soon.

I wonder if GNU `cp` could be made to somehow work in this situation?
One way would be to add an additional option, which would make `--link`
create symlinks to the target, rather than a hardlink, if the file in
question is itself a symlink.


regards,
-- 
Marcin Owsiany <marcin@owsiany.pl>              http://marcin.owsiany.pl/
GnuPG: 4096R/CDFB68E9  59F4 A7DE D37D 95C5 8939  FDDB EFDE D44B CDFB 68E9



reply via email to

[Prev in Thread] Current Thread [Next in Thread]