Meu objetivo é poder clicar com o botão direito do mouse em um link simbólico em nemo
, acionando um script personalizado que força o link a ser reescrito como um caminho relativo, caso ele possua um caminho absoluto sobre o ato .
O problema é que DRAG+SHIFT+CTRL
é codificado dentro de nemo
para produzir um symlink de caminho absoluto. Isso causa problemas quando tento acessar o sistema de arquivos remotamente.
Meu problema é que gostaria de manter o gesto DRAG+SHIFT+CTRL
, não gostaria de criar nemo
da fonte e gostaria de poder navegar em qualquer número de diretórios vinculados irrelevantemente remotamente.
Minha solução proposta é criar uma nova opção de menu de contexto em nemo
que me permita "consertar" qualquer um desses links acionando um script.
Eu criei com êxito a opção do menu de contexto criando um novo arquivo .nemo_action
usando the template no GitHub .
Existem dois diretórios para esses tipos de arquivos:
-
/usr/share/nemo/actions/
para ações em todo o sistema
-
$HOME/.local/share/nemo/actions/
para ações do usuário
meu arquivo fix-link.nemo_action
é o seguinte:
[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
e meu arquivo fix-link.sh
(no mesmo diretório) é o seguinte:
#!/bin/bash
$(ln "-rs" $(readlink -f "$1") "$1.tmp")
mv -f "$1.tmp" $(readlink -f "$1")
exit 0
Meu arquivo temporário está sendo criado muito bem, mas ele se recusa a sobrescrever o caminho de arquivo retornado por $(readlink -f "$1")
. Eu acho que pode ter algo a ver com as permissões definidas por nemo
quando eu estou inicialmente DRAG+SHIFT+CTRLl
ing para criar o link de caminho absoluto.
EDITAR
@Gilles corrigiu muitos erros no meu script, quando descobri que também precisava alterar a linha Extensions=nodirs;
no arquivo fix-link.nemo_action
para ler Extensions=any;
, caso contrário eu nunca conseguiria ativar este script através do menu de contexto em até mesmo um link para um diretório, que era o propósito inteiro para isso.
TÃO AGORA
fix-link.nemo_action
é o seguinte:
[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
e meu arquivo fix-link.sh
é o seguinte:
#!/bin/bash
ln -rs -- "$(readlink -f -- "$1")" "$1.tmp"
mv -f -- "$1.tmp" "$1"
e tudo está certo no mundo.
Obrigado a todos.