Créer des liens symboliques à partir d'un fichier
Le
François Valenduc

Bonjour à tous,
J'essaie de créer des liens symboliques à partir d'un fichier. J'utilise
le script suivant:
#!/bin/bash
cd /home/francois/Images/test
rm -f *
for i in $( cat /home/francois/config/liste ); do
echo $i
ln -s "$i" .
done
Le fichier "liste" contient donc une liste de fichier pour lequel je
veux créer des liens symboliques dans le fichier "test". Le but est
d'utiliser ensuite ce dossier comme source d'images de fond d'écran avec
KDE. Le problème est que çà ne fonctionne pas pour les noms de fichier
contenant des espaces.
Quelqu'un connaît-il une solution à mon problème ?
Merci d'avance,
François Valenduc
J'essaie de créer des liens symboliques à partir d'un fichier. J'utilise
le script suivant:
#!/bin/bash
cd /home/francois/Images/test
rm -f *
for i in $( cat /home/francois/config/liste ); do
echo $i
ln -s "$i" .
done
Le fichier "liste" contient donc une liste de fichier pour lequel je
veux créer des liens symboliques dans le fichier "test". Le but est
d'utiliser ensuite ce dossier comme source d'images de fond d'écran avec
KDE. Le problème est que çà ne fonctionne pas pour les noms de fichier
contenant des espaces.
Quelqu'un connaît-il une solution à mon problème ?
Merci d'avance,
François Valenduc
le 07/08/2011 à 17:07, François Valenduc a écrit dans le message
for i in "$( cat /home/francois/config/liste )"; do
Ou alors tu changes IFS.
--
Benoit Izac
Merci pour le conseil mais çà ne fonctionne pas. Il n'y a qu'un lien
symbolique créé pour le dernier fichier de la liste.
xargs -d 'n' -I X ln -s X . < /home/francois/config/liste
Version un peu plus élégante :
xargs -d 'n' ln -s -t . < /home/francois/config/liste
Merci pour votre aide
En suivant vos conseils sur l'IFS et les infos trouvées sur la page
http://www.commentcamarche.net/faq/5027-comment-lire-un-fichier-ligne-par-ligne,
je m'en étais sorti avec le script suivant:
old_IFS=$IFS # sauvegarde du séparateur de champ
IFS=$'n' # nouveau séparateur de champ, le caractère fin de ligne
for ligne in $(cat /home/francois/config/liste)
do
ln -s $ligne .
done
IFS=$old_IFS
Mais effectivement, çà marche aussi avec xargs.
Bonne soirée.
J'avais posé une question plus ou moins connexe il y a quelques temps
ici même et on m'avait donné comme solution un truc dans le genre ça :
#--------------------------------------
#!/bin/bash
cd /home/francois/Images/test
rm -f *
cat /home/francois/config/liste | while read i; do
echo "$i"
ln -s "$i" .
done
#--------------------------------------
Voici le fil en question :
https://groups.google.com/group/fr.comp.os.linux.configuration/browse_thread/thread/dbd5c5c059ec6e04?hl=fr#
Si jamais vous avez des fichiers dont le nom commence ou se termine par
des espaces, alors il faut ajouter « IFS=$'n' » au script ci-dessus
entre le « while » et le « read ».
--
François Lafont
C'est dangereux. Si jamais le répertoire /home/francois/Images/test
n'est pas accessible (erreur de permission, etc.), tu vas supprimer
les fichiers du répertoire courant.
Au minimum, rajoute "set -e" au début de ton script.
Effectivement, j'y ai pensé un peu trop tard, mais heureusement, j'avais
un backup ! Donc,j'ai rajouté ceci:
if test /home/francois/Images/test; then
rm -f /home/francois/Images/test/*
else
mkdir /home/francois/Images/test/
fi
, dans le message
Mauvais design. La manière correcte de programmer sous Unix n'est jamais de
tester si quelque chose existe, toujours d'essayer de faire.
mkdir rep 2> /dev/null
chdir rep || exit
rm -f *
fr.comp.os.linux.configuration :
Pourquoi ? Quel gain apporte cette méthode par rapport à l'autre ?
--
Doug - Linux user #307925 - Slackware64 roulaize ;-)
http://www.dougwise.org
http://usenet-fr.dougwise.org
http://news.dougwise.org