Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Créer des liens symboliques à partir d'un fichier

31 réponses
Avatar
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

10 réponses

1 2 3 4
Avatar
Benoit Izac
Bonjour,

le 07/08/2011 à 17:07, François Valenduc a écrit dans le message
<4e3eaa33$0$28916$ :

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
Avatar
François Valenduc
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
<4e3eaa33$0$28916$ :

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.
Avatar
Fabien LE LEZ
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
Avatar
Fabien LE LEZ
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
Avatar
François Valenduc
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.
Avatar
Francois Lafont
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
Avatar
Fabien LE LEZ
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.
Avatar
François Valenduc
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
Avatar
Nicolas George
François Valenduc
, dans le message <4e3ee690$0$3946$, a écrit :
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 *
Avatar
Doug713705
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
1 2 3 4