This is the purpose of ln
's -f
option: it removes existing destination files, if any, before creating the link.
ln -sf /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file
will create the symlink /path/to/recent/file
pointing to /path/to/data/folder/month/date/hour/minute/file
, replacing any existing file or symlink to a file if necessary (and working fine if nothing exists there already).
If a directory, or symlink to a directory, already exists with the target name, the symlink will be created inside it (so you'd end up with /path/to/recent/file/file
in the example above). The -n
option, available in some versions of ln
, will take care of symlinks to directories for you, replacing them as necessary:
ln -sfn /path/to/data/folder/month/date/hour/minute/file /path/to/recent/file
POSIX ln
doesn’t specify -n
so you can’t rely on it generally. Much of ln
’s behaviour is implementation-defined so you really need to check the specifics of the system you’re using. If you’re using GNU ln
, you can use the -t
and -T
options too, to make its behaviour fully predictable in the presence of directories (i.e. fail instead of creating the link inside the existing directory with the same name).