[bash] - renommer - ajouter de façon récursif
Résolu
enyrix
Messages postés
144
Date d'inscription
Statut
Membre
Dernière intervention
-
enyrix Messages postés 144 Date d'inscription Statut Membre Dernière intervention -
enyrix Messages postés 144 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai une fonction pour renommer en majuscule les fichier jpg en minuscule..
J'aimerais que cette commande fonctionne de façon récursif pour le dossier en cours et les sous dossiers, mais je sais pas trop comment m'y prendre.. Je demande votre aide... Merci.
J'ai une fonction pour renommer en majuscule les fichier jpg en minuscule..
J'aimerais que cette commande fonctionne de façon récursif pour le dossier en cours et les sous dossiers, mais je sais pas trop comment m'y prendre.. Je demande votre aide... Merci.
for i in *.jpg; do ext=${i##*.}; name=$(basename "$i" ".$ext" | tr '[a-z]' '[A-Z]').$ext; mv $i $name; done
A voir également:
- Rename bash
- Lupas rename - Télécharger - Gestion de fichiers
- A-pdf rename - Télécharger - PDF
- The rename - Télécharger - Gestion de fichiers
- A better finder rename - Télécharger - Divers Utilitaires
- Tag&rename - Télécharger - Catalogage
7 réponses
Je viens de mettre de l'ordre dans mon répertoire de photos afin de n'avoir que des noms de fichiers propres (sans espaces, extensions minuscules...)
Si ta question est scolaire on pourra en reparler.
Si ta question est purement pratique, et que tu utilises une distribution digne de ce nom (Debian..), tu peux utiliser rename dans un filtre:
find . -iname '*JPG' -print0 | xargs --null rename 's!jpg$!JPG!i'
man find; man xargs; man rename
rename est fourni avec PERL sous Debian wheezy.
Un CONSEIL: fait l'inverse; sous Unix les noms de fichiers utilisateurs ont une extension en minuscules.
Le problème vient de certains systèmes propriétaires incohérents qui ne gèrent pas du tout la casse.
Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
Si ta question est scolaire on pourra en reparler.
Si ta question est purement pratique, et que tu utilises une distribution digne de ce nom (Debian..), tu peux utiliser rename dans un filtre:
find . -iname '*JPG' -print0 | xargs --null rename 's!jpg$!JPG!i'
man find; man xargs; man rename
rename est fourni avec PERL sous Debian wheezy.
Un CONSEIL: fait l'inverse; sous Unix les noms de fichiers utilisateurs ont une extension en minuscules.
Le problème vient de certains systèmes propriétaires incohérents qui ne gèrent pas du tout la casse.
Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
hello
change la casse uniquement dans le nom du fichier, enlever le -n pour effectuer. a tester avant.
change la casse uniquement dans le nom du fichier, enlever le -n pour effectuer. a tester avant.
$ rename -n 's+(^.*/)([^\.]*)(\.)+$1\U$2$3+' {} \; $(find . -iname "*.jpg") ./12c01.jpg renamed as ./12C01.jpg ./12bf5.JPG renamed as ./12BF5.JPG ./12bf0.jpg renamed as ./12BF0.jpg ./a/12c01.jpg renamed as ./a/12C01.jpg ./a/12bf5.JPG renamed as ./a/12BF5.JPG ./a/12bf0.jpg renamed as ./a/12BF0.jpg ./a/a/12c01.jpg renamed as ./a/a/12C01.jpg ./a/a/12bf5.JPG renamed as ./a/a/12BF5.JPG ./a/a/12bf0.jpg renamed as ./a/a/12BF0.jpg ./a/a/12a27.jpg renamed as ./a/a/12A27.jpg ./a/12a27.jpg renamed as ./a/12A27.jpg ./12a27.jpg renamed as ./12A27.jpg $
https://www.linuxquestions.org/questions/linux-software-2/change-case-of-a-string-toupper-in-shell-script-319736/
comme tr fait des opérations sur les fichiers, il faut ruser.
tr "[:upper:]" "[:lower:]"
comme tr fait des opérations sur les fichiers, il faut ruser.
for file in $(ls *.jpg *.JPG) do : mv $file $(echo $file |tr "[:upper:]" "[:lower:]") done
J,ai essayer de combiner la commande à ce que j'ai présentement...
Je voudrais renommer mes fichiers en majuscule mais en gardant l'extension en minuscule. C'est possible de combiner cela en une commande et de lexécuter?
J'aimerais utliser la commande mv pour pouvoir garder écraser au besoin ce que semble pas faire rename..
Partie 1
Partie 2
Je voudrais renommer mes fichiers en majuscule mais en gardant l'extension en minuscule. C'est possible de combiner cela en une commande et de lexécuter?
J'aimerais utliser la commande mv pour pouvoir garder écraser au besoin ce que semble pas faire rename..
Partie 1
find . -type f -name "*.jpg" | grep -v '.svn' | tr "[:lower:]" "[:upper:]"
Partie 2
find . -type f -name "*.jpg" | grep -v '.svn' | tr "[:lower:]" "[:upper:]" | sed 's/.*\.//' | tr "[:upper:]" "[:lower:]"
Merci de votre support! Le viens de voir vos message, après un bug d'affichage et d'enregistrement sur le forum !
c'est exactement cela :
mais en incluant tous les fichiers dans tous les sous dossiers aussi (et ne pas renommer les dossiers et sous-dossiers, renommer que les fichiers)
Et aussi comment rendre cette comande exécutable ?
Ça me derange pas de devoir faire plusieurs lignes de commandes... pour arriver à mon résultat! C'est ce qui compte!
c'est exactement cela :
ls -1 | sed 's/\([^.]*.\)\(.*\)/\U\1\L\2/'
mais en incluant tous les fichiers dans tous les sous dossiers aussi (et ne pas renommer les dossiers et sous-dossiers, renommer que les fichiers)
Et aussi comment rendre cette comande exécutable ?
Ça me derange pas de devoir faire plusieurs lignes de commandes... pour arriver à mon résultat! C'est ce qui compte!
Étrange ça fais 3 fois que je commit un commentaire et que le site ne l'enregistre pas!
J'ai progressé dans mon code.. Présentement le problème c'est que ça tente de renommer aussi les dossiers même si j'ai mis l'argument -type f ... moi j'e veux renommer seulement les fichiers et ne pas toucher noms de dossiers et de sous-dossiers..
J'ai progressé dans mon code.. Présentement le problème c'est que ça tente de renommer aussi les dossiers même si j'ai mis l'argument -type f ... moi j'e veux renommer seulement les fichiers et ne pas toucher noms de dossiers et de sous-dossiers..
Efface tous les fichier et dossier .svn find . -name .svn -print0 | xargs -0 rm -rf Change tous les fichiers en majuscules for i in 'find . -type f'; do new_name='echo $i | tr '[a-z]' '[A-Z]''; mv $i $new_name ; done change uniquement tous les extensions de fichiers .JPG en minuscule (.jpg) find . -iname '*JPG' -print0 | xargs --null rename 's!JPG$!jpg!i'
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question$ ls 11n_Setup.exe pilote_ralink_AWUS051NH.exe rep/ $ ls -1 rep/ 12a27.jpg 12bf0.jpg 12bf5.JPG 12c01.jpg ABFE.jpg AC05.jpg AC09.jpg BB56.JPG $ find . -type f -iname '*jpg' -exec bash -c \ 'rep=$(dirname $1);name=$(basename $1);pref=${name%%.*};suff=${name##*.}; mv -v ${1} ${rep}/${pref^^}.${suff,,}' _ {} \; « ./rep/BB56.JPG » -> « ./rep/BB56.jpg » mv: « ./rep/AC09.jpg » et « ./rep/AC09.jpg » identifient le même fichier mv: « ./rep/AC05.jpg » et « ./rep/AC05.jpg » identifient le même fichier mv: « ./rep/ABFE.jpg » et « ./rep/ABFE.jpg » identifient le même fichier « ./rep/12a27.jpg » -> « ./rep/12A27.jpg » « ./rep/12c01.jpg » -> « ./rep/12C01.jpg » « ./rep/12bf5.JPG » -> « ./rep/12BF5.jpg » « ./rep/12bf0.jpg » -> « ./rep/12BF0.jpg » $ ls -1 rep/ 12A27.jpg 12BF0.jpg 12BF5.jpg 12C01.jpg ABFE.jpg AC05.jpg AC09.jpg BB56.jpg $
Merci pour votre aide, malheureusement il semble qu'il y a eu un bug quand j'ai écrits des messages à plusieurs reprises mais qui disparaissait quand je rechargeait cette page. De plus, il y a eu un délais avant que je vois vos messages.. je répondais alors que vos messages était déjà là alors que je ne les voyais pas... étrange !
Je retente d'écrire cette fois... (je vais copier mon message au cas où!!!)
Je crois avoir trouvé ma solution avec ce que vous m'avez donné.. La voici:
Je vais tester sur mon gros répertoire et si ça marche je mettrais cette discussion à résolue!
Je retente d'écrire cette fois... (je vais copier mon message au cas où!!!)
Je crois avoir trouvé ma solution avec ce que vous m'avez donné.. La voici:
Efface tous les fichier et dossier .svn find . -name .svn -print0 | xargs -0 rm -rf Renomme tous les noms fichiers dans tous les dossiers et sous dossier avec extension .jpg ou .JPG en majuscule exemple: test.jpg -> TEST.JPG, test.JPG -> TEST.JPG & Ne renomme pas les dossiers et sous-dossiers rename 's+(^.*/)([^\.]*)(\.)+$1\U$2$3+' {} \; $(find . -iname "*.jpg") change uniquement tous les extensions de fichiers .JPG en minuscule (.jpg) find . -iname '*JPG' -print0 | xargs --null rename 's!JPG$!jpg!i' Forcer le commit de tous les fichiers dans un nouveau svn propre svn --force --depth infinity add . svn commit
Je vais tester sur mon gros répertoire et si ça marche je mettrais cette discussion à résolue!
TEST4 (envoie de ce commentaire mais sans le code)
Merci pour votre aide, malheureusement il semble qu'il y a eu un bug quand j'ai écrits des messages à plusieurs reprises mais qui disparaissait quand je rechargeait cette page. De plus, il y a eu un délais avant que je vois vos messages.. je répondais alors que vos messages était déjà là alors que je ne les voyais pas... étrange !
Je retente d'écrire cette fois... (je vais copier mon message au cas où!!!)
Je crois avoir trouvé ma solution avec ce que vous m'avez donné..
J'essaie d'écrire le code ici mais mon message est marqué comme envoyé mais ne s'affiche pas si je réactualise...
J'aurais bien voulu vous donner la solutions...
Je vais tester sur mon gros répertoire et si ça marche je mettrais cette discussion à résolue!
Merci pour votre aide, malheureusement il semble qu'il y a eu un bug quand j'ai écrits des messages à plusieurs reprises mais qui disparaissait quand je rechargeait cette page. De plus, il y a eu un délais avant que je vois vos messages.. je répondais alors que vos messages était déjà là alors que je ne les voyais pas... étrange !
Je retente d'écrire cette fois... (je vais copier mon message au cas où!!!)
Je crois avoir trouvé ma solution avec ce que vous m'avez donné..
J'essaie d'écrire le code ici mais mon message est marqué comme envoyé mais ne s'affiche pas si je réactualise...
J'aurais bien voulu vous donner la solutions...
Je vais tester sur mon gros répertoire et si ça marche je mettrais cette discussion à résolue!
Voici mon code que le forum veut pas prendre alors je l'ai copié sur le site:
https://pastebin.com/Z6tVLKYr
https://pastebin.com/Z6tVLKYr
C'est vraiment de minuscule à majuscule volontairement, c'est pour un besoin particulier même si c'est pas la norme!
En passant, moi c'est pour Ubuntu Server mais ça marche quand même ta commande, je l'ai testé. Ça reste générique!
Il y aurait moyen de modifier ta commande pour cibler que le nom du fichier, mais toujours en ciblant les fichier avec l'extension jpg ?
exemple:
12bf0.jpg 12bf5.JPG 12c01.jpg 12a27.jpg ABFE.jpg AC05.jpg AC09.jpg BB56.JPG
doit donner:
12BF0.jpg 12BF5.jpg 12C01.jpg 12A27.jpg ABFE.jpg AC05.jpg AC09.jpg BB56.jpg