Script ksh : pb espace dans nom de fichier
Résolu/Fermé
cerise59
Messages postés
8
Date d'inscription
lundi 26 avril 2010
Statut
Membre
Dernière intervention
15 octobre 2011
-
26 avril 2010 à 20:17
jack-ft - 14 déc. 2011 à 10:59
jack-ft - 14 déc. 2011 à 10:59
A voir également:
- Script ksh : pb espace dans nom de fichier
- Script vidéo youtube - Guide
- Microsoft activation script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Script bat - Guide
- Script download - Télécharger - Édition & Programmation
8 réponses
bob031
Messages postés
8158
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014
473
26 avril 2010 à 20:32
26 avril 2010 à 20:32
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. "
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
Modifié par jipicy le 26/04/2010 à 22:42
Modifié par jipicy le 26/04/2010 à 22:42
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.
cerise59
Messages postés
8
Date d'inscription
lundi 26 avril 2010
Statut
Membre
Dernière intervention
15 octobre 2011
27 avril 2010 à 09:39
27 avril 2010 à 09:39
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
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
27 avril 2010 à 11:03
27 avril 2010 à 11:03
Merci.
Par contre peut-on avoir le véritable nom du répertoire cible ?
Par contre peut-on avoir le véritable nom du répertoire cible ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
cerise59
Messages postés
8
Date d'inscription
lundi 26 avril 2010
Statut
Membre
Dernière intervention
15 octobre 2011
27 avril 2010 à 11:09
27 avril 2010 à 11:09
Oui, le répertoire cible s'appelle common
Merci
Merci
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
27 avril 2010 à 11:10
27 avril 2010 à 11:10
Euh.. le chemin complet s'il te plait ;-))
cerise59
Messages postés
8
Date d'inscription
lundi 26 avril 2010
Statut
Membre
Dernière intervention
15 octobre 2011
27 avril 2010 à 11:37
27 avril 2010 à 11:37
/transfert/wcm/emission/picture/common
Merci
Merci
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
27 avril 2010 à 11:47
27 avril 2010 à 11:47
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 ;-))
cerise59
Messages postés
8
Date d'inscription
lundi 26 avril 2010
Statut
Membre
Dernière intervention
15 octobre 2011
27 avril 2010 à 13:12
27 avril 2010 à 13:12
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 !
bob031
Messages postés
8158
Date d'inscription
samedi 7 août 2004
Statut
Membre
Dernière intervention
1 septembre 2014
473
Modifié par bob031 le 27/04/2010 à 20:05
Modifié par bob031 le 27/04/2010 à 20:05
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(
26 avril 2010 à 20:56
Je vais essayer de modifier mon script...