Joseph Tux

Liens physiques : application au cinéma

Donner 2 noms au même fichier = lien « dur » ( hard link )
lundi 21 mars 2011

Problème :

Les noms de base de fichiers cinema comportent un slash ( / ), source de confusion avec les chemins sous les shell unix .

  • Un logiciel ne reconnait que les noms formatés avec ce slash !
  • Les autres logiciels unix de traitement de fichier, en sont perturbés.

Comment utiliser conjointement ( à tour de rôle ) ces différents logiciels sur les même fichiers ?

Solution :

Utiliser les liens « durs » ( hard links )

EXEMPLE

cd /repertoire/canonique/
cp -la * ../liens
cd ../liens
rename s,[/],_,g *

C’est tout !

Tu peux maintenant travailler avec un logiciel qui exige le nom canonique dans le répertoire canonique/, et avec le logiciel qui ne supporte pas le slash dans les noms, dans le répertoire liens/ [1].

 Syntaxes

2 Possibilités pour créer un lien physique : ln ou cp -l


Commande n°1 : ln

( ne marche pas sur les répertoires, contrairement aux liens symboliques )


Commande n°2 : cp -l


 Principe :

Toute action sur un fichier est évidemment perceptible indifféremment par l’un ou l’autre nom.
Le système de fichiers ( la partition, l’espace de nom de fichiers.. ) est donc nécessairement le même

 Application :

ÉTAPE 1 = CRÉATION DES LIENS AVEC LE MÊME NOM DE BASE, DANS UN RÉPERTOIRE PARALLÈLE : ../liens/

  Syntaxe 1 : ln

cd repertoire/des/noms/canoniques/
mkdir ../liens      # Ce nouveau répertoire est-il bien dans le même espace de noms que ./canoniques/ ?

Traite tout ce qui est dans ce répertoire avec * : ( à adapter éventuellement )

for i in * ; do ln "$i" "../liens/$i" ; done

Notes :

  1. les guillements « $i » sont indispensables pour les noms avec espace ou caractères commes le slash : /
  2. Si « $i » contient un nom avec chemin essaye ceci (mais le comportement avec / peut troubler la chose !) :

  Syntaxe 2 : cp -al

cd repertoire/des/noms/canoniques/
Traite tout ce qui est dans ce répertoire avec * : ( à adapter éventuellement )
cp -la * ../liens  # Ce nouveau répertoire est-il bien dans le même espace de noms que ./canoniques/ ?

ÉTAPE 2 = RENOMMAGE DE CE 2ÈME NOM, dans le répertoire de ton choix parmi les 2 : (ici : ../liens/)
cd ../liens
Renommer tout ce qui est dans le répertoire avec * : ( à adapter éventuellement )
rename s,/,_,g * # À adapter éventuellement

 EN RÉSUMÉ :

cp -la * ../liens
cd ../liens
rename s,[/],_,g *

C’est tout !

Tu peux maintenant travailler avec un logiciel qui exige le nom canonique dans le répertoire canonique/, et avec le logiciel qui ne supporte pas le slash dans les noms, dans le répertoire liens/

Tu agis dans tous les cas sur le même fichier, et tu peux y retrouver tes petits !

 ANNEXES

 A rename et les regex

regexp est l’abréviation pour « regular expression » : en français, « expression régulière » ou « expression rationnelle ».

rename utilise le moteur de regex et la syntaxe de perl. [2]
la regex, c’est l’expression de reconnaissance ou de reconnaissance remplacement que tu indiques à rename

La syntaxe de regex est un langage de programmation à part entière,très puissant, parfois complexe à lire, subtile à comprendre (délicat et sujet à beaucoup de surprises) pour traiter du texte.

ici, c’est le plus simple :

s   #substitution de la première partie par la deuxième partie
,   # délimiteur arbitraire des 2 parties (un même caratère)
rename s{/}{_}g *       ( variante avec les caractères ouvrants/fermants plus lisibles dans les longues regex )

rename s![/:;]!_!g       remplace chaque / ou ; ou : par _

le g final dit que le remplacement doit se répéter ( global), sinon, seule la première occurance de la chaine sera remplacée

man grep te donne les bases des expressions rationnelles pour grep, awk etc

Les syntaxes de perl sont plus riches, plus variées, plus performantes, mais les bases sont les mêmes.

  • Les docs foisonnent, d’un niveau très inégal.
  • Tu trouveras les bases simples ici
  • Et ici

 B liens physiques = liens durs

Le système identifie un fichier par son numéro : l’ inode, unique dans la partition qui le contient.

Les noms de cet inode peuvent être multiples pour cet inode , seulement pour les fichiers simples ( « feuilles » de l’arbre binaire qui les stocke : les branches sont des répertoires )

Pour afficher l’inode, identité véritable du fichier : ls -i

exemple
ls -li *.xvg
liste les fichiers ./*.xvg avec leur N° d’inode

Pour rechercher tous les noms d’un fichier donné : find /un/repertoire -samefile un_nom_de_fichier

exemple
find . -samefile abc_123_truc.xvg
liste tous les noms du fichiers : abc_123_truc.xvg

Avec rm peux effacer autant de liens physiques que tu veux, seul le dernier restant supprimera réellement le fichier.

Mais si tu « écrases » un fichier ( par exemple avec > !!! ) il sera vide pour tous ses noms !

 C Liens physiques vs liens symboliques

Maintenant que tu as compris qu’ un lien dur, ou lien physique, n’est rien d’autre qu’un nom supplémentaire poura ccéder au même fichier, voici ce qu’est un lien symbolique :

ln -s monfichier.truc lien_symbolique.truc

Il s’agit la d’un lien sur le nom du fichier monfichier, et non sur le fichier lui même.

Si tu renommes monfichier.truc en autrefichier, lien_symbolique.truc ne pointe plus sur rien ; il est cassé.

Et oui un lien symbolique pointe sur un nom, par sur une adresse (inode)

Avantage : il peut être utilisé sur un autre système de fichier ( un autre espace de nom, par exempel une autre partition )

J’avais déjà parlé de tout celà ici

[1Une condition : les répertoires doivent être montés sur le même espace de nom, la même partition

[2C’est un script Perl !

Voir en ligne : La magie de cp -la

Accueil | Contact | Plan du site | | Statistiques du site | Visiteurs : 119 / 57688

Suivre la vie du site fr  Suivre la vie du site GNU, LINUX, BSD, LL  Suivre la vie du site AIDES GNU/LINUX  Suivre la vie du site Administration : astuces, stratégies   ?

Site réalisé avec SPIP 3.1.6 + AHUNTSIC

Creative Commons License