Retourner aux forums || Retourner au forum Programmation.shell
Programmation.shell : liens symboliques récursifs pour fichiers avec espaces
Posté par Farvardin (page perso, ) le 01 septembre 2007J'ai un dossier avec des sous-dossiers contenant des espaces. Ces sous-dossiers contiennent eux-même des fichiers avec parfois des espaces.
[http://www.inform-fiction.org/I7Downloads/Extensions/]
C'est pour un programme dont la version linux vient de sortir récemment, et malheureusement pour la version linux il faut avoir les noms de tous ces fichiers en minuscules (mais avec espace). Il faut donc utiliser des liens symboliques vers les fichiers avec les majuscules. Si ce n'était que cela, cela pourrait encore aller, par exemple avec ce script on peut faire des liens automatiquement :
for A in * ; do ln -sf $A `echo $A | tr '[A-Z]' '[a-z]'` ; done
mais les espaces m'empêchent de lancer des scripts pour le faire automatiquement.
avec ça on peut remplacer les espaces par des tirets bas, mais du coup les liens ne vont plus se faire comme prévu :
find . -type f -name "* *" -print0 | perl -n0e '$old = $_; s/ /_/g; rename $old, $_'
une idée pour garder le meilleur des deux et pouvoir générer automatiquement ces liens symboliques ?
(oui je sais, les fichiers avec des espaces, c'est MAL, je déteste cela de façon générale)
No troll found in this incoming post.
Checked by ATG.
Version: 7.4.821 / Trollifiante Database: 247.13.2/1101 - Release Date: 30/04/2008 12:29
IFS
Avec bash (et probablement d'autres shells), voir la variable d'environnement "IFS" (Internal Field Separator) ; par défaut, l'espace est un séparateur du point de vu du shell, ce qui doit être la cause du problème.
En utilisant uniquement le retour chariot comme séparateur, ça doit donner le code suivant :
IFS='
'
for A in * ; do ln -sf $A `echo $A | tr '[A-Z]' '[a-z]'` ; done
A+
-
[^]Re: IFS
Posté par Farvardin (page perso, ) le 02/09/2007 à 17:24. (lien). Évalué à 2.merci de l'astuce. Par contre j'ai fais un export IFS=@ à la place...
--
No troll found in this incoming post.
Checked by ATG.
Version: 7.4.821 / Trollifiante Database: 247.13.2/1101 - Release Date: 30/04/2008 12:29
et avec des guillemets ?
Il ne suffit pas de metre des guillemets autour de $A et de `echo...` ?
Pour moi (avec zsh), la commande
for a in *; do ln -s "$a" "$(echo $a | tr '[A-Z]' '[a-z]')" ; done
marche parfaitement. (enfin à condition que tous les fichiers aient une majuscule dans leur nom et sur une partition case-sensitive...
-
[^]Re: et avec des guillemets ?
Posté par Farvardin (page perso, ) le 02/09/2007 à 17:23. (lien). Évalué à 2.super, cela fonctionne très bien ! Je n'y avais pas pensé...
Merci beaucoup.--
No troll found in this incoming post.
Checked by ATG.
Version: 7.4.821 / Trollifiante Database: 247.13.2/1101 - Release Date: 30/04/2008 12:29
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.shell



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.