web-dev-qa-db-fra.com

Comment modifier le chemin cible du lien symbolique rompu à partir de l'interface graphique?

Supposons la situation suivante:

  1. J'ai file1 quelque part

    $ touch file1
    
  2. Je fais un lien symbolique vers file1 en tant que symlink1:

    $ ln -s file1 symlink1
    $ file symlink1 
    symlink1: symbolic link to file1
    
  3. Je renomme file1 en nouveau nom (maintenant symlink1 est cassé)

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

Après la dernière étape, le lien symlink1- est rompu.

Je sais que Midnight Commander a l’option Fichier → Éditer le lien symbolique , mais c’est un moyen terminal:

Edit symlink in Midnight Commander

$ file symlink1 
symlink1: symbolic link to file2

et il est très utile si la cible et le lien symbolique se trouvent dans différents systèmes de fichiers et/ou dossiers imbriqués.

Pour autant que je sache, Nautilus, Caja, Nemo, Thunar et Dolphin n’ont pas cette fonctionnalité.

Mise à jour. La solution la plus utile pour moi serait l'intégration au gestionnaire de fichiers Caja de Caja-actions . J'utilise Caja quotidiennement.

7
N0rbert

Modifier le lien symbolique dans Nautilus

Le scénario

Pour faire cela dans Nautilus, nous devons créer un script en utilisant:

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

Coller dans ce qui suit:

#!/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

et le rendre exécutable

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

Échantillon de sortie

Ce sont les données de test utilisées. L'avant-dernière section montre le lien brisé. Ensuite, notre script est exécuté en donnant un nouveau nom de fichier. La dernière section montre le nouveau bon lien.

Edit Link2

Exemple d'écran

Voici à quoi ressemble le script lorsque vous l'exécutez:

edit link 1.png

  • Mettre en évidence un lien brisé avec Nautilus
  • Clic droit pour le menu contextuel
  • Sélectionnez Scripts
  • Sélectionnez edit-link
  • Entrez le nouveau nom de fichier ci-dessus et cliquez sur OK bouton

Modifier le lien symbolique dans Caja

La méthode est similaire à Nautilus mais avec quelques spécificités de Caja. Nous devrions suivre Guide de migration GNOME2 → MATE .

Nous avons donc besoin de créer un script dans le ~/.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

et le rendre exécutable

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

Ensuite, nous pouvons utiliser ce script à partir du menu déroulant Scripts Caja.

2
WinEunuuchs2Unix

J'utilise thunar comme gestionnaire de fichiers par défaut, et voici ce que je suggère pour obtenir un comportement similaire à celui de mc.

Créez un script Shell simple et enregistrez-le où bon vous semble, à des fins de démonstration, je l'ai enregistré dans mon $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

Ajoutez une nouvelle action personnalisée qui exécute ce script, par exemple dans thunar:

enter image description here

Maintenant, je peux faire un clic droit sur les fichiers et sélectionner "relier", et il demandera une nouvelle adresse pour ce lien:

enter image description here

Il est évident que vous devez installer le paquetage zenity pour utiliser ce script. Je pense que vous pouvez réussir à l’utiliser dans différents gestionnaires de fichiers.

8
Ravexina