Как отредактировать путь назначения разорванной символьной связи от 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- связь разорвана.

Я знаю в ту полночь, что у Командующего есть Файл → опция символьной ссылки Редактирования, но это - терминальный путь:

Edit symlink in Midnight Commander

$ file symlink1 
symlink1: symbolic link to file2

и очень полезно, если целевая и символьная ссылка расположена в различных файловых системах и/или вложенных папках.

Поскольку далеко я вижу, что у Наутилуса, Caja, Немо, Thunar и дельфина нет этой функциональности.

Обновление. Самым полезным решением для меня была бы интеграция с файловым менеджером Caja Caja-действиями. Я использую Caja на ежедневной основе.

7
задан 19 August 2018 в 02:14

2 ответа

Отредактируйте символьную ссылку в наутилусе

Сценарий

Чтобы сделать это в Наутилусе, мы должны создать использование сценария:

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

Демонстрационный вывод

Это - используемые данные тестирования. Предпоследний раздел показывает неработающую ссылку. Затем наш скрипт запущен, дав новое имя файла. Последний раздел показывает новую хорошую ссылку.

Edit Link2

Демонстрационный экран

Это - то, на что сценарий похож при выполнении его:

edit link 1.png

  • Выделите неработающую ссылку с Наутилусом
  • Щелкните правой кнопкой для контекстного меню
  • Выбрать Scripts
  • Выбрать edit-link
  • Введите новое имя файла выше и нажмите "OK" кнопка

Отредактируйте символьную ссылку в Caja

Метод похож Наутилусу, но с некоторыми специфическими особенностями 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 выпадающее меню.

2
ответ дан 23 November 2019 в 06:25

Я использую 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

Теперь я могу щелкнуть правой кнопкой мыши по файлам и выбрать «relink», и он запросит новый адрес по этой ссылке:

enter image description here

Это очевидно, что вам нужно установить пакет zenity, чтобы использовать этот скрипт, я думаю, вы можете управлять использовать его в разных файловых менеджерах.

8
ответ дан 23 November 2019 в 06:25

Другие вопросы по тегам:

Похожие вопросы: