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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 4
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Benoit Izac
Le #23636551
Bonjour,

le 07/08/2011 à 17:07, François Valenduc a écrit dans le message

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.



for i in "$( cat /home/francois/config/liste )"; do

Ou alors tu changes IFS.

--
Benoit Izac
François Valenduc
Le #23636611
Le 07/08/11 17:21, Benoit Izac a écrit :
Bonjour,

le 07/08/2011 à 17:07, François Valenduc a écrit dans le message

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.



for i in "$( cat /home/francois/config/liste )"; do

Ou alors tu changes IFS.



Merci pour le conseil mais çà ne fonctionne pas. Il n'y a qu'un lien
symbolique créé pour le dernier fichier de la liste.
Fabien LE LEZ
Le #23636711
On Sun, 07 Aug 2011 17:07:31 +0200, François Valenduc

for i in $( cat /home/francois/config/liste ); do
echo $i
ln -s "$i" .



xargs -d 'n' -I X ln -s X . < /home/francois/config/liste
Fabien LE LEZ
Le #23636781
J'avais écrit :

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
François Valenduc
Le #23636941
Le 07/08/11 18:23, Fabien LE LEZ a écrit :
J'avais écrit :

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.
Francois Lafont
Le #23636971
Bonjour,

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
Fabien LE LEZ
Le #23637001
On Sun, 07 Aug 2011 17:07:31 +0200, François Valenduc

#!/bin/bash
cd /home/francois/Images/test
rm -f *



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.
François Valenduc
Le #23637131
Le 07/08/11 20:13, Fabien LE LEZ a écrit :
On Sun, 07 Aug 2011 17:07:31 +0200, François Valenduc

#!/bin/bash
cd /home/francois/Images/test
rm -f *



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
Nicolas George
Le #23637291
François Valenduc
, dans le message
if test /home/francois/Images/test; then
rm -f /home/francois/Images/test/*



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 *
Doug713705
Le #23637401
Le 07-08-2011, Nicolas George nous expliquait dans
fr.comp.os.linux.configuration :

if test /home/francois/Images/test; then
rm -f /home/francois/Images/test/*



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 *



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
Publicité
Poster une réponse
Anonyme