Mettre en majuscule la première lettre de chaque mot dans un nom de fichier ou de répertoire dans le Shell
Je suis en train d'écrire une commande shell où je peux spécifier un répertoire, puis chaque fichier et chaque répertoire à l'intérieur aurez la première lettre de chaque mot en majuscule. Donc
/doCumenTS/tesT.txt
devrait changer pour
/DoCumenTS/TesT.txt
Je pense qu'il devrait commencer comme
for i in directory do
tr something_goes_here
done
Le problème je ne peux pas savoir comment le faire uniquement la première lettre. J'ai fait un script qui majuscules l'ensemble du nom de fichier, mais je ne peux pas comprendre comment obtenez seulement la première lettre de chaque mot.
Merci!
Il n'existe aucun moyen de restreindre le contexte de
Cela pourrait aider: theunixshell.blogspot.com/2013/02/...
tr
, de sorte qu'il est certainement pas le bon de commande ici. Il a toujours succédanés de toutes les occurrences des caractères que vous fournissez en tant qu'arguments.Cela pourrait aider: theunixshell.blogspot.com/2013/02/...
OriginalL'auteur user1507982 | 2012-07-06
Vous devez vous connecter pour publier un commentaire.
De l'utilisation de GNU Sed
Vous pouvez le faire assez facilement avec GNU sed. Par exemple:
Limites
Noter que le \U escape est un GNU sed extension. Le manuel dit:
OriginalL'auteur Todd A. Jacobs
Bash 4.0+ a un paramètre de substitution de minuscules à majuscules'. Pour modifier uniquement
le premier caractère de l'utiliser comme ceci:
Le résultat:
Vous pouvez faire une deuxième boucle intérieure avec
IFS=/
de diviser le chemin des composants.Changé après tripleee commentaire.
OriginalL'auteur Fritz G. Mehner
Solution est ci-dessous:
Prises à partir d'ici: http://souravgulati.webs.com/apps/forums/topics/show/8584862-shell-script-capitalize-first-letter-of-every-word-of-a-line-
Juste ce que je cherchais!
regardez caractère Unicode de décomposition/normalisation, ici et ici. Décomposer, case à cocher pour "nu lettres latines", utiliser ce code, puis recombiner. Ce n'est pas tous les
bash
, si l'on pouvait écrire unbash
version.OriginalL'auteur Parvinder Singh
Avant:
Modification:
Après:
-depth
trouver une option afin de vous garantir un répertoire de fichiers sont renommés avant que le répertoire lui-même.find . -mindepth 1 -depth -execdir bash -c 'f=${0#./}; mv -- "$f" "${f^}"' {} \;
pas moi, j'ai toujours mon commentaire downvotes.
OriginalL'auteur glenn jackman
Éviter la boucle à l'aide de fonctionnalités de bash v4:
Vous pouvez l'intégrer à l'intérieur d'une fonction shell:
Utilisation:
Cela fonctionne même sur le chemin des noms contenant des espaces, des tabulations et des nouvelles lignes de!
OriginalL'auteur olibre