My goal is to be able to right-click a symbolic link in nemo
, triggering a custom script that forces the link to be re-written as a relative path, should it happen to possess an absolute path upon the act.
The problem is that DRAG+SHIFT+CTRL
is hard-coded within nemo
to to produce an absolutely-pathed symlink. This causes problems when I attempt to access the file system remotely.
My problem is I would like to retain the DRAG+SHIFT+CTRL
gesture, I would not like to build nemo
from source, and I would like to be able to browse any number of irrelevantly-linked directories remotely.
My proposed solution is to create a new context-menu option within nemo
that will allow me to "fix" any one of these links by triggering a script.
I've successfully created the context-menu option by creating a new .nemo_action
file using the template at GitHub.
There are two directories for these types of files:
/usr/share/nemo/actions/
for system-wide actions$HOME/.local/share/nemo/actions/
for user actions
my fix-link.nemo_action
file is as follows:
[Nemo Action]
Active=true
Name=Force Relative Link
Comment=If the file is a link to an absolute path, it will be forced to become relative.
Exec=<fix-link.sh %F>
Selection=any
Extensions=nodirs;
EscapeSpaces=true
and my fix-link.sh
file (in the same directory) is as follows:
#!/bin/bash
$(ln "-rs" $(readlink -f "$1") "$1.tmp")
mv -f "$1.tmp" $(readlink -f "$1")
exit 0
My temporary file is being created just fine, but it refuses to overwrite the filepath returned by $(readlink -f "$1")
. I think it might have something to do with permissions set by nemo
when I'm initially DRAG+SHIFT+CTRLl
ing to create the absolutely-pathed link.
EDIT
@Gilles fixed the many errors in my script, at which time I discovered that I also needed to change the Extensions=nodirs;
line in the fix-link.nemo_action
file to read Extensions=any;
, otherwise I wouldn't ever be able to activate this script through the context menu on even a link to a directory, which was the whole purpose for this thing.
SO NOW
fix-link.nemo_action
is as follows:
[Nemo Action]
Active=true
Name=Force Relative Link
Comment=If the file is a link to an absolute path, it will be forced to become relative.
Exec=<fix-link.sh %F>
Selection=any
Extensions=any;
EscapeSpaces=true
and my fix-link.sh
file is as follows:
#!/bin/bash
ln -rs -- "$(readlink -f -- "$1")" "$1.tmp"
mv -f -- "$1.tmp" "$1"
and all is right in the world. Thanks everybody.
rn
used to be a Usenet reader -- did you meanmv
instead? – Jeff Schaller Aug 08 '15 at 02:56