web-dev-qa-db-ja.com

壊れたシンボリックリンクのターゲットパスをGUIから編集する方法は?

次の状況を想定してみましょう。

  1. どこかにfile1があります

    $ touch file1
    
  2. file1へのシンボリックリンクをsymlink1として作成します。

    $ ln -s file1 symlink1
    $ file symlink1 
    symlink1: symbolic link to file1
    
  3. file1の名前を新しい名前に変更しました(現在symlink1は壊れています)

    $ mv file1 file2
    $ file symlink1 
    symlink1: broken symbolic link to file1
    

最後のステップの後、symlink1-リンクが壊れています。

Midnight Commanderには File→Edit symlink オプションがありますが、それは最終的な方法です。

Edit symlink in Midnight Commander

$ file symlink1 
symlink1: symbolic link to file2

また、ターゲットとシンボリックリンクが異なるファイルシステムやネストされたフォルダーにある場合に非常に便利です。

Nautilus、Caja、Nemo、Thunar、Dolphinにはこの機能がないことがわかります。

Update.私にとって最も便利な解決策は、 Caja-actions によるCaja file-managerとの統合です。私は毎日Cajaを使用しています。

7
N0rbert

Nautilusでシンボリックリンクを編集する

スクリプト

Nautilusでこれを行うには、次を使用してスクリプトを作成する必要があります。

mkdir -p ~/.local/share/nautilus/scripts
gedit ~/.local/share/nautilus/scripts/edit-link

以下に貼り付けます。

#!/bin/bash

# NAME: edit-link
# PATH: $HOME/.local/share/nautilus/scripts
# DESC: Edit symbolic link
# CALL: Called from Nautilus file manager.
# DATE: August 18, 2018.

# strip new line char passed by Nautilus
FILENAME=$(echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | sed -e 's/\r//g')

# Multiple files can't be selected.
LINE_COUNT=$(wc -l <<< "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS")
LINE_COUNT=$((LINE_COUNT-1))

if [[ $LINE_COUNT > 1 ]] ; then
    zenity --error --text "Ony one file can be selected at a time! "
    exit 1
fi

# Object type must be "file..." (ie no directories, etc.)
if [ -d "${FILENAME}" ] ; then
    zenity --error --text "$FILENAME is a directory!";
    exit 1
else
    if [ -L "${FILENAME}" ]; then
        : # Bash noop
    else
        zenity --error --text "${FILENAME} is not a symbolic link!";
        exit 2
    fi
fi

NewLink=$(zenity --entry --text "Enter new symbolic link")
ln -sf "$NewLink" "${FILENAME}"

exit 0

実行可能にする

chmod +x ~/.local/share/nautilus/scripts/edit-link

サンプル出力

これは使用されるテストデータです。最後の2番目のセクションは、壊れたリンクを示しています。次に、新しいファイル名を指定してスクリプトを実行します。最後のセクションは、新しい良好なリンクを示しています。

Edit Link2

サンプル画面

スクリプトを実行すると、次のようになります。

edit link 1.png

  • 壊れたリンクをNautilusで強調表示する
  • 右クリックしてコンテキストメニューを表示
  • Scriptsを選択します
  • edit-linkを選択します
  • 上に新しいファイル名を入力してクリックします OK ボタン

Cajaでシンボリックリンクを編集

この方法はNautilusに似ていますが、Caja固有のものがいくつかあります。 GNOME2→MATE移行ガイド に従う必要があります。

したがって、~/.config/caja/scriptsにスクリプトを作成する必要があります。

mkdir -p ~/.config/caja/scripts
cat > ~/.config/caja/scripts/edit-link << \EOF
#!/bin/bash

# NAME: edit-link
# PATH: $HOME/.config/caja/scripts
# DESC: Edit symbolic link
# CALL: Called from Caja file manager.
# DATE: August 19, 2018.

# strip new line char passed by Caja
FILENAME=$(echo $CAJA_SCRIPT_SELECTED_FILE_PATHS | sed -e 's/\r//g')

# Multiple files can't be selected.
LINE_COUNT=$(wc -l <<< "$CAJA_SCRIPT_SELECTED_FILE_PATHS")
LINE_COUNT=$((LINE_COUNT-1))

if [[ $LINE_COUNT > 1 ]] ; then
    zenity --error --text "Ony one file can be selected at a time! "
    exit 1
fi

# Object type must be "file..." (ie no directories, etc.)
if [ -d "${FILENAME}" ] ; then
    zenity --error --text "$FILENAME is a directory!";
    exit 1
else
    if [ -L "${FILENAME}" ]; then
        : # Bash noop
    else
        zenity --error --text "${FILENAME} is not a symbolic link!";
        exit 2
    fi
fi

NewLink=$(zenity --entry --text "Enter new symbolic link")
ln -sf "$NewLink" "${FILENAME}"

exit 0
EOF

実行可能にする

chmod +x ~/.config/caja/scripts/edit-link

次に、Caja Scriptsドロップダウンメニューからこのスクリプトを使用できます。

2

私はデフォルトのファイルマネージャとしてthunarを使用していますが、mcのような同様の動作を得るために私が提案するのはここにあります。

簡単なシェルスクリプトを作成し、好きな場所に保存します。デモのために、$HOMEに保存しました。

#!/bin/bash
if [ -L "$1" ];
then
 new_address=$(zenity --entry)
 ln -sf "$new_address" "$1"
else
 zenity --error --text 'This is not a link'
fi

このスクリプトを実行する新しいカスタムアクションを、たとえばthunarに追加します。

enter image description here

ファイルを右クリックして「再リンク」を選択すると、そのリンクの新しいアドレスが要求されます。

enter image description here

これは、このスクリプトを使用するためにzenityパッケージをインストールする必要があることは明らかです。さまざまなファイルマネージャーで使用することができます。

8
Ravexina