Script ksh : pb espace dans nom de fichier
Résolu
cerise59
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
jack-ft -
jack-ft -
A voir également:
- Script ksh : pb espace dans nom de fichier
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Script cmd - Guide
- Une erreur est survenue dans le script de cette page - Forum Windows 10
8 réponses
Bonjour,
je ne suis pas spécialiste du ksh, mais je pense que les exemples ci-dessous devraient ouvrir une voie "royale" :
http://www.computing.net/answers/unix/how-to-remove-spaces-in-filenames/8204.html
... enfin, je crois ....
ps : j'ai bien compris le "Et je ne peux pas changer les noms. Je dois conserver ces espaces. "
je ne suis pas spécialiste du ksh, mais je pense que les exemples ci-dessous devraient ouvrir une voie "royale" :
http://www.computing.net/answers/unix/how-to-remove-spaces-in-filenames/8204.html
... enfin, je crois ....
ps : j'ai bien compris le "Et je ne peux pas changer les noms. Je dois conserver ces espaces. "
Salut,
Affiches-nous le contenu de ton script s'il te plait, s'il le faut ce n'est pas grand chose à rectifier ;-)
Édit : Affiches-nous aussi la liste des fichiers et les répertoires sources et destinations... Merci.
Affiches-nous le contenu de ton script s'il te plait, s'il le faut ce n'est pas grand chose à rectifier ;-)
Édit : Affiches-nous aussi la liste des fichiers et les répertoires sources et destinations... Merci.
Bonjour,
Voici l'extrait en question :
J'ai testé deux façons (c'est pourquoi l'une des lignes avec sed est en commentaire)
Voici la liste de départ ( liste_common_stable_test.lst ) :
./04_Marque_PTPT_american vintage_01.gif
./04_Marque_PTPT_teddy smith_01.gif
./07_Services_PTPT_garantie 02_01.gif
./04_Marque_PTPT_littlest pet shop_01.gif
./05_Qualite_PTPT_- valeur sure_01.gif
./07_Services_PTPT_garantie best 02 ans_01.gif
./04_Marque_PTPT_ecko red girls PE10_01.gif
./04_Marque_PTPT_a l heure anglaise_01.gif
./04_Marque_PTPT_grendha PE10_01.gif
./04_Marque_PTPT_roaman s_01.gif
Merci pour votre aide
Voici l'extrait en question :
cd <répertoire_source> #cat liste_common_stable_test.lst|sed 's/.\///'|sed 's/^/"/g'|sed 's/$/"/g'>liste_common_tabulee_test.lst cat liste_common_stable_test.lst|sed 's/.\///'|sed 's/ /\\ /g' >liste_common_tabulee_test.lst while read line do echo $line mv $line <répertoire_cible> done < liste_common_tabulee_test.lst
J'ai testé deux façons (c'est pourquoi l'une des lignes avec sed est en commentaire)
Voici la liste de départ ( liste_common_stable_test.lst ) :
./04_Marque_PTPT_american vintage_01.gif
./04_Marque_PTPT_teddy smith_01.gif
./07_Services_PTPT_garantie 02_01.gif
./04_Marque_PTPT_littlest pet shop_01.gif
./05_Qualite_PTPT_- valeur sure_01.gif
./07_Services_PTPT_garantie best 02 ans_01.gif
./04_Marque_PTPT_ecko red girls PE10_01.gif
./04_Marque_PTPT_a l heure anglaise_01.gif
./04_Marque_PTPT_grendha PE10_01.gif
./04_Marque_PTPT_roaman s_01.gif
Merci pour votre aide
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bon je ne vois pas où est le problème ??!!
L'important c'est de quoter les variables !!!
C'en en bash, mais je suppose qu'en ksh ça doit passer aussi. J'avais même mis des espaces dans le nom des répertoires pour corser le tout ;-))
L'important c'est de quoter les variables !!!
jp@MDK:~/tmpfs ssh$ tree . |-- foo.sh |-- rep cible '-- rep source |-- Le jour se lève.txt |-- Trop tard.txt '-- Un jour sans fin.txt 2 directories, 4 files jp@MDK:~/tmpfs ssh$ cat foo.sh #! /bin/sh #set -xv cd "rep source" for fich in * do echo "Déplacement du fichier \"${fich}\" vers \"../rep cible/\"" mv -v "${fich}" "../rep cible/" done jp@MDK:~/tmpfs ssh$ ./foo.sh Déplacement du fichier "Le jour se lève.txt" vers "../rep cible/" 'Le jour se lève.txt' -> '../rep cible/Le jour se lève.txt' Déplacement du fichier "Trop tard.txt" vers "../rep cible/" 'Trop tard.txt' -> '../rep cible/Trop tard.txt' Déplacement du fichier "Un jour sans fin.txt" vers "../rep cible/" 'Un jour sans fin.txt' -> '../rep cible/Un jour sans fin.txt' jp@MDK:~/tmpfs ssh$ tree . |-- foo.sh |-- rep cible | |-- Le jour se lève.txt | |-- Trop tard.txt | '-- Un jour sans fin.txt '-- rep source 2 directories, 4 files jp@MDK:~/tmpfs ssh$
C'en en bash, mais je suppose qu'en ksh ça doit passer aussi. J'avais même mis des espaces dans le nom des répertoires pour corser le tout ;-))
Merci pour ton aide.
Je n'ai pas pu reproduire directement cela dans mon script. Je dois impérativement passer par ce système de liste de fichiers. En revanche, j'ai positionné des guillemets au niveau de ma variable $line, comme tu l'as fait dans ton exemple :
Et ça fonctionne nickel : les fichiers sont bien déplacés et leur nom est préservé.
encore un grand merci !
Je n'ai pas pu reproduire directement cela dans mon script. Je dois impérativement passer par ce système de liste de fichiers. En revanche, j'ai positionné des guillemets au niveau de ma variable $line, comme tu l'as fait dans ton exemple :
cat $WCM_PICTURE/liste_common_stable_test.lst|sed 's/.\///'|sed 's/ /\\ /g' >$WCM_PICTURE/liste_common_tabulee_test.lst while read line do echo $line mv "$line" $WCM_TRF/common/ done < $WCM_PICTURE/liste_common_tabulee_test.lst
Et ça fonctionne nickel : les fichiers sont bien déplacés et leur nom est préservé.
encore un grand merci !
Clap ! Clap ! Clap ! Clap ! Clap ! Clap ! Clap ! Clap ! Clap ! Clap ! Clap ! Clap !
-:))
ben moi, je pensais que le fait d'être en ksh devait corser la chose ....
enfin, je noterai cet extrait :
En revanche, j'ai positionné des guillemets au niveau de ma variable $line,
effectivement, on retrouvait le cas du mv "$file" (et l'utilisation du awk au lieu du sed) dans les exemples proposés.
c'est peut-être ça l'effet ksh ....
^ ^
-:))
ben moi, je pensais que le fait d'être en ksh devait corser la chose ....
enfin, je noterai cet extrait :
En revanche, j'ai positionné des guillemets au niveau de ma variable $line,
effectivement, on retrouvait le cas du mv "$file" (et l'utilisation du awk au lieu du sed) dans les exemples proposés.
c'est peut-être ça l'effet ksh ....
^ ^
@cerise59
D'après moi (et mes tests), il est inutile de backslasher les espaces (le "|sed 's/ /\\ /g'" est inutile) car:
1) "read line" lit bien les lignes entières (que les espaces soient backslashées ou non)
2) dans le "mv", tu as bien pris la précaution d'entourer de guillemets le contenu de la ligne $line
Il est également inutile de créer un fichier supplémentaire.
D'où ma proposition:
Reste le uuoc... à prendre ou à laisser... chacun ses goûts!
HTH
)jack(
D'après moi (et mes tests), il est inutile de backslasher les espaces (le "|sed 's/ /\\ /g'" est inutile) car:
1) "read line" lit bien les lignes entières (que les espaces soient backslashées ou non)
2) dans le "mv", tu as bien pris la précaution d'entourer de guillemets le contenu de la ligne $line
Il est également inutile de créer un fichier supplémentaire.
D'où ma proposition:
cat "$WCM_PICTURE/liste_common_stable_test.lst" \ | sed 's/.\///' \ | while read line ; do echo "moving '$line' ..." mv "$line" "$WCM_TRF/common/" done
Reste le uuoc... à prendre ou à laisser... chacun ses goûts!
HTH
)jack(
Je vais essayer de modifier mon script...