bonjour :)
c'est la première fois que je viens sur ce forum et j'espère que vous pourrez m'aider
je voudrais renommer des noms de répertoires du type:
toto a la plage.
par
Toto A La Plage
je ne vois qu'une solution:
for toto in $(find . -type d | ls); do
rep=echo -e "${rep}" | sed -r -e 's/(^.| .)/\U&/g'
echo "${rep}" 1111111111
mv "${rep}" "${toto}"
done
mais le résultat de echo me donne
Toto
A
LA
Plage
comment faire pour avoir: Toto A LA Plage sur une seule ligne
merci d'avance
# Capitalize
Posté par 태 (site web personnel) . Évalué à 4.
personnellement, je ferais
(c'est du zsh). Et tant qu'à faire du zsh,
[^] # Re: Capitalize
Posté par Michaël (site web personnel) . Évalué à 2.
Ce serait bien de tester si le fichier de destination existe avant d'écraser bêtement des données très importantes …
[^] # Re: Capitalize
Posté par 태 (site web personnel) . Évalué à 2.
Bah, il suffit de rajouter un
-n
au bon endroit...[^] # Re: Capitalize
Posté par BFG . Évalué à 1.
Tant qu'à faire du zsh :
Ou utiliser les outils fournis par zsh :
[^] # Re: Capitalize
Posté par BFG . Évalué à 1.
Une dernière chose, les guillemets ne sont pas nécessaires dans vos exemples, même si les noms contiennent des espaces, car zsh a une gestion plus saine des types (chaine, tableau de chaines) que sh/bash dans de nombreux cas.
# en bash ....
Posté par totof2000 . Évalué à 1.
... il faut jouer avec IFS
Les explications
Pour info, je n'ai pas fait de find car find prend le répertoire courant dans sa liste.
[^] # Re: en bash ....
Posté par totof2000 . Évalué à 3.
Au fait, si c'est pour un TP, essaie de comprendre pourquoi ce que tu as écrit ne fonctionnait pas, et pourquoi ce que je t'ai fourni fonctionne.
Je t'ai aidé parce que tu avais essayé qqchose, que la ligne SED n'est pas mauvaise, par contre il y a quelques détails qui font que ton bout de code ne fonctionnne pas. Je suis prêt à t'expliquer si tu le veux.
[^] # Re: en bash ....
Posté par NBaH . Évalué à 1.
Bonjour,
l'usage de l'IFS n'est ici pas utile.
en effet, la boucle for n'itère pas sur le résultat d'une commande, mais sur le développement de l'astérisque, qui, lui, échappe les espaces contenus dans les noms de fichiers.
de plus,
[ -d "$toto" ] parce que si $toto contient un espace le test va geindre : «opérateur binaire attendu»
OLDIFS=IFS
IFS=OLDIFS
bah, il va être beau l'$IFS !
[^] # Re: en bash ....
Posté par totof2000 . Évalué à 2.
l'usage de l'IFS n'est ici pas utile.
en effet, la boucle for n'itère pas sur le résultat d'une commande, mais sur le développement de l'astérisque, qui, lui, échappe les espaces contenus dans les noms de fichiers.
Je ne veux pas être méchant mais ton commetaire me fait penser aux cours d'Anglais à l'école : toujours qqn pour critiquer ceux qui participent, mais pour ce qui est de participer, ben yavait personne.
La tu idiques que IFS est inutile : peu-être mais chez moi ça marche. Alors la solution n'est peut-être pas idéale, mais elle a le mérite de onctionner. Tu proposes quoi ?
de plus,
[ -d "$toto" ] parce que si $toto contient un espace le test va geindre : «opérateur binaire attendu»
Idem (bien que je sache très bien d'ou vienne le pb, et je ne me suis pas attardé dessus car pas le temps de le faire).
OLDIFS=IFS
IFS=OLDIFS
bah, il va être beau l'$IFS !
Idem, code écrit assez vite, et j'ai oublié un $. Mais le PI peu brancher aussi son cerveau non ?
[^] # Re: en bash ....
Posté par Krunch (site web personnel) . Évalué à 2.
J'approuve également l'onction tant qu'elle est donnée par de jeunes filles nubiles.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: en full bash ...
Posté par NBaH . Évalué à 1.
mkdir "toto a la plage"
(shopt -s nullglob
for dir in ./*/
do newDir="${dir%/*}" path="${newDir%/*}" newDir="${newDir##*/}"
echo "mv "$dir" "$path/$(set -- $newDir; echo "${@^}")""
done)
Toto A La Plage
autre chose ? Je peux... ?
[^] # Re: en full bash ...oops
Posté par NBaH . Évalué à 1.
mv "./toto a la plage/" "./Toto A La Plage"
[^] # Re: en full bash ...
Posté par totof2000 . Évalué à 2.
Merci ..; :)
# rename
Posté par Krunch (site web personnel) . Évalué à 3.
$ rename 's/b(w)/uc$1/ge'
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
[^] # Re: rename
Posté par Krunch (site web personnel) . Évalué à 6.
J'exige le retour de templeet.
pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.
# man tr
Posté par cel . Évalué à -2.
Hello,
Une autre solution consiste a utiliser la commande tr:
echo "Mon Nom De Fichier" | tr [:upper:] [:lower:]
Dans ton cas, ca doit donner quelque chose comme:
for toto in $(find . -type d)
do
mv "$toto" "$(echo $toto | tr [:upper:] [:lower:])"
done
My 2 cents,
cedric.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.