私の目標は、シンボリックリンクでシンボリックリンクを右クリックし、リンクnemo
を相対パスに強制的に書き換えるカスタムスクリプトをトリガーすることです(絶対パスがある場合)。
問題は、絶対パスを持つシンボリックリンクを生成するためにDRAG+SHIFT+CTRL
ハードコードされていることです。nemo
これにより、ファイルシステムにリモートでアクセスしようとすると問題が発生します。
私の問題は、ジェスチャーを維持したい、ソースからビルドしたくDRAG+SHIFT+CTRL
ない、nemo
関連していないリンクされたディレクトリをリモートで閲覧できるようにしたいということです。
私が思いついた解決策は、その中に新しい状況に合ったメニューオプションを作成することでした。nemo
これにより、スクリプトをトリガーしてこれらのリンクを「修正」することができます。
新しく作成し、コンテキストメニューオプションを正常に作成しました。以下を.nemo_action
使用して新しいファイルを作成しました。GitHubのテンプレート。
このタイプのファイルには2つのディレクトリがあります。
/usr/share/nemo/actions/
システム全体にわたる作業$HOME/.local/share/nemo/actions/
ユーザー操作のため
私のfix-link.nemo_action
ファイルは次のとおりです。
[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
私のfix-link.sh
ファイル(同じディレクトリにあります)は次のとおりです。
#!/bin/bash
$(ln "-rs" $(readlink -f "$1") "$1.tmp")
mv -f "$1.tmp" $(readlink -f "$1")
exit 0
一時ファイルは正常に作成されましたが、上書きは拒否されます。これは、元の絶対パスリンクを作成したときに設定した権限に関連しているよう$(readlink -f "$1")
です。nemo
DRAG+SHIFT+CTRLl
編集する
@Gillesは私のスクリプトで多くのバグを修正しました。この時点で、私はファイルExtensions=nodirs;
の行をfix-link.nemo_action
読むように変更する必要があることがわかりましたExtensions=any;
。それ以外の場合は、コンテキストメニューからこのスクリプトを有効またはリンクすることもできません。ディレクトリ、これはすべての目的で行われる作業です。
だから今
fix-link.nemo_action
次のように:
[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
私のfix-link.sh
ファイルは次のとおりです。
#!/bin/bash
ln -rs -- "$(readlink -f -- "$1")" "$1.tmp"
mv -f -- "$1.tmp" "$1"
すべてが世界とよく合います。みんなありがとうございます。
答え1
スクリプトにはいくつかの問題があります。
- 二重引用符がありません。について
$(readlink …)
。リンク先にスペースまたはワイルドカードが含まれていると中断されます。 - コマンド置換を使用し
ln
、結果を実行するコマンドとして使用しています。幸いなことln
に、出力は生成されないため、何の害もありません。 - あなたの
mv
コマンドはシンボリックリンクをターゲットの場所に移動しますが、これは意味がありません。
私はこれがあなたが書きたいものだと思います:
#!/bin/sh
ln -rs -- "$(readlink -f -- "$1")" "$1.tmp"
mv -f -- "$1.tmp" "$1"
または、次のものを使用できます。symlinks
多くのLinuxディストリビューションに存在するユーティリティ(元のMark Lordsによって管理され、現在はJ. Brandt Buckleyによって管理されています)。このコマンドは、symlinks -c /path/to/directory
指定されたディレクトリ内のすべてのシンボリックリンクを相対リンクに変換します。