mv un fichier sans rompre un lien symbolique vers ce fichier


24

Est-il possible mvqu'un fichier sans rompre un lien symbolique vers ce fichier? Ma réponse initiale à cela est non, et je travaille sur une solution basée sur un script pour changer les liens immédiatement après le déménagement, mais je me demandais comment d'autres ont abordé ce problème. Les chemins et les noms des liens symboliques sont connus à l'avance, donc en théorie tout ce que je dois faire est:

  1. obtenir la cible du lien
  2. mv la cible
  3. recréer le lien vers la nouvelle cible
  4. créer un nouveau lien vers la nouvelle cible (différent du lien d'origine, que je veux toujours conserver pour l'instant)

À une date ultérieure:

  1. supprimer l'ancien lien

1-4 sera encapsulé dans un script bash, mais je me demande si quelqu'un a une approche plus élégante, ou connaît une commande intégrée ou que je ne connais pas.


2
Les liens durs n'ont pas ce problème. Ils ont cependant d'autres inconvénients. :-)
Stéphane Gimenez

3
Oui, je ne peux pas utiliser de liens physiques car les fichiers se trouvent sur plusieurs systèmes de fichiers.
gabe.

2
Aussi: impossible de créer un lien physique vers un répertoire.
sampablokuper

Réponses:


8

Vous êtes sur la bonne voie, je ne pense pas qu'il existe un moyen plus simple que la séquence que vous décrivez.

Les étapes 3 et 4 sont un peu déroutantes. Si vous souhaitez recibler des liens existants, vous gardez le même nom que vous pouvez utiliser ln -fpour remplacer les fichiers existants. Si vous souhaitez que le nom de vos liens change également pour refléter le nouveau nom cible, votre séquence est correcte.


1
Hé, ouais, relisez juste cette partie et maintenant je me suis aussi embrouillé. Je vais le modifier pour que cela ait plus de sens. Merci.
gabe.

Je suis un peu confus quant à l'utilisation de ln -f, mais je pense que le script publié par @fred peut aider à clarifier son fonctionnement. La page de manuel n'a pas été d'une grande aide, étonnamment.
gabe.

@gabe. La version originale de ma réponse avait la bonne -s -f, mais en la modifiant, elle a "perdu" le -s: faux! De wikipedia : 'ln' sans options crée un lien dur, 'ln -f' force un lien dur ... alors merci pour la question, cela a vraiment confirmé la syntaxe pour moi maintenant .. Cela m'a certainement fait revérifier des choses ... Cela nécessite ln -s -f.. (j'ai fait le réglage)
Peter.O

4

Pour votre situation:

# change target of a symbolic link
# -------------
# ln -s, --symbolic    make symbolic links instead of hard links
# ln -f, --force       remove existing destination files
#
# Setup: make junk.link to  file junk
  echo hello > ~/junk
  ln -s ~/junk ~/junk.link;  cat ~/junk.link
#
# move file and point the link to it.
  org="$(readlink ~/junk.link)"
  new="$org".moved
  mv "$org" "$new"
  ln -s -f "$new" "$new".link  # '-s' for a soft link

Remarque: ce sera plus compliqué si une chaîne de liens est impliquée.
Peter.O

0

J'ai le prochain problème. J'ai trouvé un très bon thème d'icônes appelé "Suru ++"

Suru ++ 20 [Officiellement sans bogue et compatible avec 11 DEs]

Mais ce thème d'icône est fait en svg toute image. Maintenant, je veux l'utiliser dans Fluxbox et générer des entrées de menu, mais cela n'est possible qu'avec l'image d'icône png.Je télécharge le maître à l' intérieur qui sont toutes des icônes au format svg, et oui je peux convertir de la ligne de commande svg en png tout ok générer pour chaque taille de dossier comme 16x16, 24x24 px. Mais dans ce dossier, il y a des liens symboliques vers un fichier svg:

extensions svg à l'intérieur de liens symboliques que je veux changer en png

S'il est possible de changer l'extension svg en png à l'intérieur de tous les liens symbolix, le thème de l'icône fonctionnerait bien dans le menu Fluxbox et les gestionnaires de fichiers. J'ai fait une entrée sur ce thème d'icônes en utilisant dans Xubuntu mais en espagnol

Dieu vous protège

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.