#1 Le 06/03/2017, à 09:33
- DonutMan75
[RESOLU] [SHELL] Lien symbolique et wildcard
Bonjour,
j'ai un dossier ./A rempli de millier de fichiers et je souhaiterais faire des liens symboliques de *certains* de ces fichiers et les placer dans un répertoire B...
J'ai tenté un :
$ ln -vs ./A/*2014* -t ./B
Mon répertoire B contient des liens symboliques des bons fichiers.... mais j'ai l'impression qu'ils pointent vers eux-même
$ head ./B/essai2014.txt
head: cannot open `./B/essai2014.txt' for reading: Too many levels of symbolic links
J'ai l'impression que je permute des arguments, pourtant la syntaxe est bien ln -s FICHIER_SOURCE FICHIER_DESTINATION... Et l'option -t permet, si je comprends bien, de spécifier un répertoire de sortie plutôt qu'un fichier de destination...
Qu'en pensez-vous ?
Merci d'avance
Dernière modification par DonutMan75 (Le 06/03/2017, à 09:39)
Hors ligne
#2 Le 06/03/2017, à 09:38
- DonutMan75
Re : [RESOLU] [SHELL] Lien symbolique et wildcard
Bonjour,
je viens de résoudre de moi-même mon problème...
En testant un peu, le problème s'est résolu de lui-même en utilisant des *chemins absolus*.
D'un point de vue général, c'est certes préférable de toujours utiliser les chemins absolus...
Dans ce cas précis en revanche, si quelqu'un peut m'expliquer pourquoi chemin absolu ==> ça marche et chemin relatif ==> ça marche pas, je sèche un peu ^^
Bon lundi à tous et à bientôt !
Donut
Hors ligne
#3 Le 06/03/2017, à 10:00
- pingouinux
Re : [RESOLU] [SHELL] Lien symbolique et wildcard
Bonjour,
En faisant la même chose que toi, j'obtiens
$ ls -l ./B/essai2014.txt
lrwxrwxrwx 1 user user 17 Mar 6 09:47 ./B/essai2014.txt -> ./A/essai2014.txt
c'est-à-dire que le lien pointe vers
./B/A/essai2014.txt
qui n'existe pas.
Pour obtenir ton message d'erreur, je pense que tu as lancé d'autres commandes que tu n'as pas montrées.
Hors ligne
#4 Le 06/03/2017, à 10:21
- Bougron
Re : [RESOLU] [SHELL] Lien symbolique et wildcard
En détails
u16041@u16041:~$ ln -vs ./A/*2014* -t ./B
ln: impossible d'accéder à './B': Aucun fichier ou dossier de ce type
u16041@u16041:~$ mkdir B
u16041@u16041:~$ ln -vs ./A/*2014* -t ./B
'./B/F2014.txt' -> './A/F2014.txt'
'./B/H2014.txt' -> './A/H2014.txt'
u16041@u16041:~$ head ./B/F2014.txt
head: impossible d'ouvrir './B/F2014.txt' en lecture: Aucun fichier ou dossier de ce type
u16041@u16041:~$
Essaies donc de cette façon
ln -rvs ./A/*2014* -t ./B
'./B/F2014.txt' -> '../A/F2014.txt'
'./B/H2014.txt' -> '../A/H2014.txt'
u16041@u16041:~$ pg ./B/*
F
H
Dernière modification par Bougron (Le 06/03/2017, à 10:28)
Hors ligne
#5 Le 07/03/2017, à 16:07
- DonutMan75
Re : [RESOLU] [SHELL] Lien symbolique et wildcard
Bonjour à tous,
avant tout merci beaucoup pour vos messages
Pingouinux, j'ai repris mon message et je me suis aperçu (en effet) d'une légère différence entre ce que j'avais fait et ce que j'ai écrit.
Dans mon cas, le répertoire de sortie ./B était un sous-répertoire de ./A
Dans les deux cas (./B sous-répertoire de A ou non) le problème vient des chemins relatifs.
Dans mon cas, je créais ainsi un lien symbolique "2014.txt" dans B qui pointait vers "./2014.txt" (chemin relatif dans A) : du coup ça donnait un lien qui pointait vers lui-même !
Bougron, je n'ai pas d'option -r avec mon ln. Peut-être n'utilisons nous pas la même version de ln ? Cette option est sensé faire quoi ?
$ ln --version
ln (GNU coreutils) 8.13
En tout cas merci encore pour vos réponses détaillées
Bonne fin de journée
Donut
Hors ligne
#6 Le 07/03/2017, à 16:11
- Bougron
Re : [RESOLU] [SHELL] Lien symbolique et wildcard
Bonjour
u16041@u16041:~$ ln --help
Utilisation : ln [OPTION]... [-T] TARGET LINK_NAME (1er format)
ou : ln [OPTION]... TARGET (2e format)
ou : ln [OPTION]... TARGET... DIRECTORY (3e format)
ou : ln [OPTION]... -t DIRECTORY TARGET... (4e format)
Dans le 1er format, créer un lien vers TARGET avec le nom LINK_NAME.
Dans le 2e format, créer un lien vers TARGET dans le répertoire actuel.
Dans les 3e et 4e formats, créer des liens vers chaque TARGET dans DIRECTORY.
Créer des liens directs par défaut et des liens symboliques avec --symbolic.
Par défaut, aucune destination (nom ou nouveau lien) ne devrait encore exister.
À la création de liens directs, chaque TARGET doit exister. Les liens
symboliques peuvent contenir un texte arbitraire ; s'il est résolu par la suite,
un lien relatif est interprété comme une relation avec son répertoire parent.Les arguments obligatoires pour les options longues le sont aussi pour les
options courtes.
--backup[=CONTROL] archiver chaque fichier de destination existant
-b identique à --backup mais n'accepte pas d'argument
-d, -F, --directory permettre au superutilisateur de créer des liens
directs (hard) sur des répertoires (échouera
probablement en raison de restrictions système
même pour le superutilisateur)
-f, --force supprimer les fichiers de destination existants
-i, --interactive demander s'il faut supprimer les destinations
-L, --logical déréférencer les TARGETs qui sont des liens
symboliques
-n, --no-dereference traiter LINK_NAME comme un fichier normal s'il
s'agit d'un lien symbolique vers un répertoire
-P, --physical transformer les liens directs en liens symboliques
-r, --relative créer des liens symbolique relatifs à
l'emplacement du lien
-s, --symbolic créer un lien symbolique au lieu d'un lien direct
-S, --suffix=SUFFIX écraser le suffixe d'archivage habituel
-t, --target-directory=DIRECTORY indiquer le DIRECTORY dans lequel créer
les liens
-T, --no-target-directory toujours traiter LINK_NAME comme un fichier normal
-v, --verbose afficher le nom de chaque fichier lié
--help afficher l'aide et quitter
--version afficher des informations de version et quitterLe suffixe d'archive est « ~ », sauf s'il est définit autrement avec --suffix ou
SIMPLE_BACKUP_SUFFIX. La méthode du contrôle de version peut être sélectionnée
par l'option --backup ou par la variable d'environnement VERSION_CONTROL.
Les valeurs possibles sont les suivantes :none, off ne jamais archiver (même si --backup est utilisée)
numbered, t effectuer des archives numérotées
existing, nil numéroter si des archives numérotées existent déjà, se
comporter comme « simple » dans le cas contraire
simple, never effectuer toujours des archives simplesL'utilisation de -s ignore -L et -P. Autrement, la dernière option indiquée
contrôle le comportement lorsqu'une TARGET est un lien symbolique, utilisant
-P par défaut.Aide en ligne de GNU coreutils : <http://www.gnu.org/software/coreutils/>
Signalez les problèmes de traduction de « ln » à : <traduc@traduc.org>
Full documentation at: <http://www.gnu.org/software/coreutils/ln>
or available locally via: info '(coreutils) ln invocation'
u16041@u16041:~$
Hors ligne