Liens physiques : application au cinéma
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 :
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" ; doneNotes :
- les guillements « $i » sont indispensables pour les noms avec espace ou caractères commes le slash : /
- 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/ ?
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.
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
[1] Une condition : les répertoires doivent être montés sur le même espace de nom, la même partition
[2] C’est un script Perl !
fr
GNU, LINUX, BSD, LL
AIDES GNU/LINUX
Administration : astuces, stratégies
?
